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

常规的方法:对于两个字符串进行排序,然后判断两个字符串是否相等(可以直接判断字符串是否相等,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字符量很大,且不知道所有的字符是什么,无法建立字符表。