1. 程式人生 > >lintcode55:比較兩個字串A和B,確定A中是否包含B中所有的字元。

lintcode55:比較兩個字串A和B,確定A中是否包含B中所有的字元。

*樣例
給出 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的第一題)。