Lintcode--002(两个字符串是变位词)

写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。

 
样例

给出 s = "abcd",t="dcab",返回 true.
给出 s = "ab", t = "ab", 返回 true.
给出 s = "ab", t = "ac", 返回 false.

 标签 

解题:
class Solution {
public:
    /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    bool anagram(string s, string t) {
        // write your code here
        
        //Lintcode--002;
        //此题目应该与Lintcode--001属于同类型题目,核心思路一致,只是最后两个字符串做的比较不一样;
        //这个题目甚至更简单一些,但是细节上需要注意ASCII码表,一些常见字符对应的十进制值,这有利于以后使用;
        //解析可参考Lintcode--001;
        
        
        //边界条件,长度如果不相等,直接pass;
        if(s.size()!=t.size()){
            return false;
        }
        //主要任务应该是比较两个字符串,各个字母出现的次数是否相同;
        //创建数组,用来统计各种字符出现的次数;
        
        else {
            int letters1[128];
            memset(letters1,0,sizeof(letters1));
            for(int i=0;i<s.size();i++){
                letters1[s[i]-' ']++;
            }
            int letters2[128];
            memset(letters2,0,sizeof(letters2));
            for(int j=0;j<t.size();j++){
                letters2[t[j]-' ']++;
            }
            for (int k=0;k<128;){
                if (letters1[k]==letters2[k]){
                    k=k+1;
                }
                else 
                {
                    return false;
                }
            }
            return true;
        }
    }
};

 

附:ASCII码表

posted @ 2016-08-19 18:10  静悟生慧  阅读(620)  评论(0编辑  收藏  举报