比较两个字符串,如果一个字符串包含其他字符串的所有字符,则返回true

时间:2015-11-07 18:43:25

标签: java string compare

我在lintcode上练习并尝试解决这个问题

比较两个字符串A和B,确定A是否包含B中的所有字符。

字符串A和B中的字符都是大写字母。

我编写了这段代码,它检查A中B的每个字符,并从A中删除找到的字符,但不知怎的,它输入的测试失败了 A =“ABCD”,B =“ACC”。当它应该给出错误的

时,它会将输出设为true

我不明白我的代码中的问题

    public class Solution {
/**
 * @param A : A string includes Upper Case letters
 * @param B : A string includes Upper Case letter
 * @return :  if string A contains all of the characters in B return true else return false
 */
public boolean compareStrings(String A, String B) {
    // write your code here
    int aLen = A.length();
    int bLen = B.length();
    if (aLen == 0) {
        return bLen == 0;
    }
    for(int i = 0; i<bLen; i++){
        String temp = B.substring(i,i);
        if(A.contains(temp))
            A.replace(temp, "");
        else
            return false;
    }
    return true;
}

}

2 个答案:

答案 0 :(得分:0)

你只想每次摆脱A中的一个角色。否则,下次在B中遇到相同的字符时,它就不会存在。

尝试使用replaceFirst代替replace

此外,您需要使用A将结果分配回A = A.replaceFirst(...),否则您实际上不会更改String

最后,B.substring(i,i);是一个长度为0的字符串,而不是长度为1的字符串。请改为"" + B.charAt(i)B.substring(i, i + 1)

这是一个有效的完整版本

public static boolean compareStrings(String A, String B) {
    // write your code here
    int aLen = A.length();
    int bLen = B.length();
    if (aLen == 0) {
        return bLen == 0;
    }
    for(int i = 0; i<bLen; i++){
        String temp = B.substring(i,i + 1);
        if(A.contains(temp))
            A = A.replaceFirst(temp, "");
        else
            return false;
    }
    return true;
}

答案 1 :(得分:0)

String类的replace()方法将用第二个参数替换第一个参数的每个匹配项,而是尝试使用replaceFirst()。示例实施

    public static boolean compareStrings(String A, String B) {
            boolean isOk = true;

            for (int i = 0;i < B.length();i++) {
                    if (!A.contains(B.charAt(i) + "")) {
                        isOk = false;
                        break;
                    }
                    A = A.replaceFirst(B.charAt(i) + "", ""); 
            }
            return isOk;
    }