[题目来源](242. 有效的字母异位词 - 力扣(LeetCode))

image-20230405230509034

常规的方法:对于两个字符串进行排序,然后判断两个字符串是否相等(可以直接判断字符串是否相等,if s==t return true)

一种奇妙的思路:建立字符表

两个字符串中的字符无非就是26个字母。建立一个容量为26的数组,内容全部初始化为0.如果s中存在某一字母,就在相应的位置上+1,如果t中存在某一字母,就在相应的位置上-1,最后如果数组中还是全为0,说明s和t中的内容正好相互抵消,否则说明s和t不是有效的字母异位词。(感觉有点像摩尔投票法中的支持者打架)

bool isAnagram(string s, string t) {
        int num[26]={0}; 
        if(s.length()!=t.length())
            return false;
        for(int i=0;s[i]!='\0';i++){
            num[s[i]-'a']++;
            num[t[i]-'a']--;
           
        }
        for(int i=0;i<26;i++)
            if(num[i]!=0)
                return false;
        return true;
}

弊端:必须面对已知的字符,建立完整的字符表,比如已知含有的字符无非是26个字母。如果按照题目的进阶,unicode字符量很大,且不知道所有的字符是什么,无法建立字符表。