题意: 字母异位词,即不在意字符的顺序,只要字符种类和各种字符个数一样就符合字母异位词。
解题思路一:因为题目告诉你,只使用小写字母。 因此只需要使用计数排序,记录元素的数目就行。(也可以理解为hash)
1 bool isAnagram(string s, string t) { 2 if(s.size()!=t.size()){ 3 return false; 4 } 5 array<int,26> a1{0},a2{0}; // 初始化不为0; 6 // ostream_iterator<int> os{cout," "}; // 采用迭代器进行输出:ostream_iteraotr 7 // copy(begin(a1),end(a1),os); // copy 8 for(auto& p:s){ //auto& p:string ; char 9 a1[p-'a']++; 10 } 11 for(auto& p:t){ 12 a2[p-'a']++; 13 } 14 for(int i=0;i<26;i++){ 15 if(a1[i]!=a2[i]){ 16 return false; 17 } 18 } 19 return true; 20 }
- 使用array需要进行初始化,采用列表初始化:{} ,只要将第一个初始为0,那么接下来的元素都会进行初始化0。
拓展思考:如果是Unicode码,那么必须用map(有序的),算法大致思路不变。
来源:https://www.cnblogs.com/yy-1046741080/p/12236074.html