我在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;
}
}
答案 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;
}