LintCode 字串比較

qingyezhu發表於2015-06-27

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

給出 A = "ABCD" B = "AABC", 返回 false

給出 A = "ABCD" B = "ACD",返回 true

 

我的程式碼:

    /**
     * 由於是在字串strA中確定是否包含字串strB中的所有字元<br/>
     * 故只需要將字串strB中的每一個字元在字串strA中遍歷,當在字串strA中不存在時,則直接返回false<br/>
     * 當存在是,則進行字串strB的下一個字元查詢<br/>
     * @param strA
     * @param strB
     * @return
     */
    public boolean compareStrings(String strA, String strB) {
        int aLen = strA.length();
        int[] arr = new int[aLen];
        for (int i = 0; i < aLen; i++) {
            arr[i] = 0;
        }
        boolean flag = true;
        for (int i = 0, bLen = strB.length(); i < bLen; i++) {
            flag = false;
             for(int j = 0;(j < aLen) && (!flag);j ++){
                if (strB.charAt(i) == strA.charAt(j) && arr[j] == 0) {
                    arr[j] = 1;
                    flag = true;
                }
            }
            if (!flag) {
                break;
            }
        }
        return flag;
    }

 

還有種比較牛的

思路:統計兩邊的資訊進行比較。如果B中的每種字元的個數小於等於A中的,則A包含B。

參考資料:http://www.jianshu.com/p/f7f9987f1bbb

int Achar[26];//儲存字串的每個字母個數
 int Bchar[26];
 for (int i = 0; i<26; i++) {
     Achar[i] = 0;
     Bchar[i] = 0;
 }
 int Adate,Bdate;//記錄AB的字元統計資料
 int countA = A.length();
 int countB = B.length();
 for (int i = 0; i<countA; i++) {
 int index;
 index = A[i] - 65;
 Achar[index]++;
 }
 for (int i = 0; i<countB; i++) {
 int index;
 index = B[i] - 65;//65為大寫A的ASCⅡ碼值
 Bchar[index]++;
 }
 for (int i = 0; i<26; i++) {
     if (Achar[i]<Bchar[i])
     return false;
}
return true;
}

 

 

相關文章