Two Strings Are Anagrams

public class Solution {
    /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    public boolean anagram(String s, String t) {
        // write your code here
        int lens = s.length();
        int lent = t.length();
        
        if (lens != lent){
            return false;
        } else {
            int[] base = new int[256];
            for (char c : s.toCharArray()){
                base[c]++;
            }
            
            for (char c : t.toCharArray()){
                base[c]--;
                if (base[c] < 0){
                    return false;
                }
            }
            return true;
        }
    }
};

这道题很简单但很巧妙,不能直接用hash table的原因是一个string可能是abbc,另一个是aabc,虽然字母一样,但是字母出现的顺序不一样。而这种方法是用ASCII Table先创建一个长度为256的int array,然后用第一个string的每一个char做标准,把每个字母出现的个数存在array里。第二个string把出现的字母个数从第个array里剪掉。只要有小于0的,就说明字母一定不完全一样。不需要考虑大于0的情况是因为两个string长度相等,只要有大于0的,就说明第一个string有一个字母出现的次数比第二个多,第二个必然有另一个字母出现的次数比第一个多。这样长度才能相等。

小问题:

string变char array -> .toCharArray();

int array initialization -> int[] intArray = new int[256]

posted on 2015-12-01 13:54  codingEskimo  阅读(123)  评论(0)    收藏  举报

导航