lintcode55:比較兩個字串A和B,確定A中是否包含B中所有的字元。
阿新 • • 發佈:2018-12-24
*樣例
給出 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的第一題)。