LintCode 字符串比较

比较两个字符串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;
}

 

 

posted @ 2015-06-27 21:36  qingyezhu  阅读(1014)  评论(0编辑  收藏  举报