*样例
给出 A = “ABCD” B = “ACD”,返回 true
给出 A = “ABCD” B = “AABC”, 返回 false
注意
在 A 中出现的 B 字符串里的字符不需要连续或者有序。*
看到这个问题一开始没想太多就写了,最初代码如下:
public boolean compareStrings(String A, String B) {
// write your code here
int a=0;
char[] stringArr1 = A.toCharArray();
char[] stringArr2 = B.toCharArray();
for(int i = 0;i<stringArr2.length;i++)
for(int j = 0;j<stringArr1.length;j++){
if(stringArr2[i]==stringArr1[j]){
a++;
continue;
}
}
if(a==stringArr2.length){
return true;
}else{
return false;
}
}
在提交验证的时候发现到%55的时候就失败了,还是考虑欠佳。没有考虑如果出现两个重复的情况。
然后我就想到在比较相等后删除对应stringArr1中的数组元素。在删除之后又出现了错误。可以看前面的代码我用的是continue。因为对continue理解错误。我以为continue是结束当前的整个for循环,实际是只结束当次循环。所以说当输入的是类似“BCB”,”B”这样的字符时会出现错误。所以更改后的代码如下
public boolean compareStrings(String A, String B) {
// write your code here
int a=0;
char[] stringArr1 = A.toCharArray();
char[] stringArr2 = B.toCharArray();
for(int i = 0;i<stringArr2.length;i++){
lable: for(int j = 0;j<stringArr1.length;j++){
if(stringArr2[i]==stringArr1[j]){
a++;
for(int c=j;c<stringArr1.length-1;c++){
stringArr1[c]=stringArr1[c+1];
}
stringArr1[stringArr1.length-1]='0';
break lable;
}
}
}
if(a==stringArr2.length){
return true;
}else{
return false;
}
}
这样就提交成功了。
虽然不提倡用lable语法(我们老师是这样说的)。但这样写也蛮简单的。
下次换个思路做吧。也可参照这一篇博客 比较两个字符串A和B,确定A中是否包含B中所有的字符。比我写的高级多了(这是我做的lintcode的第一题)。