一、题意
二、思考过程
数组其实就是一个简单的哈希表。
定义一个数组叫做record用来上记录字符串s里字符出现的次数。
需要把字符映射到数组也就是哈希表的索引下标上,因为字符a到字符z的ASCII是26个连续的数值,所以字符a映射为下标0,相应的字符z映射为下标25。
再遍历 字符串s的时候,只需要将 s[i] - ‘a’ 所在的元素做+1 操作即可,并不需要记住字符a的ASCII,只要求出一个相对数值就可以了。 这样就将字符串s中字符出现的次数,统计出来了。
step1:定义数组record,长度为26,初始化为0
int record[26]={0};
step2:遍历字符串+统计字符出现次数
for(int i=0;i<strlen(s);i++){//统计字符,增加次数 record[s[i]-'a']++; } for(int i;i<strlen(t);i++){//统计字符,减少次数 record[t[i]-'a']--; }
step3:最后遍历一遍record数组,判断是否重复字符
for(int i=0;i<26;i++){ if(record[i]!=0){ return false; } } return true;
三、完整代码
bool isAnagram(char * s, char * t){ int record[26]={0}; for(int i=0;i<strlen(s);i++){ record[s[i]-'a']++; } for(int i;i<strlen(t);i++){ record[t[i]-'a']--; } for(int i=0;i<26;i++){ if(record[i]!=0){ return false; } } return true; }