Fork me on GitHub

LintCode题解之比较字符串


 

使用标记的方式,先遍历一遍B,出现一次就记录一次出现次数,然后遍历A,将记录的B的出现次数消去,最后检查一下记录的标记位是不是都消去了,总共需要检查三次,即进行三次O(n)的遍历。

然后总结出规律如果A的字符长度小于B的字符长度时,A不可能完全包含B,所以做一个优化处理,先检查一下长度,如果能够确定结果的话就直接返回了。

 

AC代码:

public class Solution {
    
    /*
     * @param A: A string
     * @param B: A string
     * @return: if string A contains all of the characters in B return true else return false
     */
    public boolean compareStrings(String A, String B) {
        
        if(A.length()<B.length()) return false;
        
        int[] book = new int[26];
        for(int i=0; i<B.length(); i++){
            book[B.charAt(i)-'A']++;
        }
        for(int i=0; i<A.length(); i++){
            book[A.charAt(i)-'A']--;
        }
        for(int i=0; i<book.length; i++){
            if(book[i]>0) return false;
        }
        return true;
    }
    
}

  

题目来源: http://www.lintcode.com/zh-cn/problem/compare-strings/

 

posted @ 2017-11-26 03:25  CC11001100  阅读(186)  评论(0编辑  收藏  举报