首页 > 解决方案 > 如何在两个字符串中找到导致它们不相等的字符?

问题描述

我想在两个字符串中找到使它们不相等的字符并打印它们。

例如:

String str1 = "abcd";
String str2 = "abc";

输出=“d”

我使用的代码如下所示:

public void removeUnequalChars() {
String str1 = "abcd";
String str2 = "abc";



    String commonChars = "";

    for (int i = 0; i < str.length(); i++) {
        for (int j = 0; j < str2.length(); j++) {
                if (str.charAt(i) == str2.charAt(j)) {
                    commonChars += str.charAt(i);
                }
            }
        }

        for(int i = 0; i < commonChars.length(); i ++)
        {
            String charToRemove = commonChars.charAt(i)+"";
            str = str.replace(charToRemove, "");
            str2 = str2.replace(charToRemove, "");

        }


        String s3= str+str2;

        System.out.println(s3);
}

但是代码的问题是,如果我们有重复的字符,这个解决方案就行不通了。例如 :

String str1 = "abccd";
String str2 = "abc";

预期输出是“cd”,但上面的代码只打印“d”

有什么办法可以解决这个问题吗?

标签: java

解决方案


您可以使用 str.replaceFirst() 来保留其他出现的字符,而不是使用 str.replace()。

您还只需要使用较短的字符串来代替 commonChars,然后还要跟踪较短字符串中不存在于较长字符串中的任何字符。

所以它看起来像:

public String uncommonCharacters(String str, String str2){
    String shorterString;
    String longerString;

    if (str.length() < str2.length()){
        shorterString = str;
        longerString = str2;
    } else {
        shorterString = str2;
        longerString = str;
    }

    StringBuilder charsNotInLongString = new StringBuilder();
    for(String charToRemove : shorterString.split("")) {
        String newLongerString = longerString.replaceFirst(charToRemove, "");
        if (newLongerString.equals(longerString)) {
            charsNotInLongString.append(charToRemove);
        } else {
            longerString = newLongerString;
        }
    }

    return longerString + charsNotInLongString.toString();
}

编辑: woops 没有意识到它被两次添加到 commonChars,根据评论更新。

更新:刚到家,更新更漂亮


推荐阅读