题意: 字母异位词,即不在意字符的顺序,只要字符种类和各种字符个数一样就符合字母异位词。
解题思路一:因为题目告诉你,只使用小写字母。 因此只需要使用计数排序,记录元素的数目就行。(也可以理解为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