给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
异位词即为含有字母相同并且每个字母出现的次数相同
解题思路:用a[26]b[26]来储存每个字母出现的次数如果每个字母出现次数都相同那么就是异位词
代码如下:
```cpp
class Solution {
public:
bool isAnagram(string s, string t) {
int a[26],b[26],i;
memset(a, 0, sizeof(a));//初始化时要用sizeof()来进行初始化不然会报错
memset(b, 0, sizeof(b));
for(i=0;i<s.length();i++){
a[s[i]-'a']++;
}//利用数组来对二十六个字母出现的次数进行统计
for(i=0;i<t.length();i++){
b[t[i]-'a']++;
}
for(i=0;i<26;i++){
if(a[i]!=b[i]){
return false;
break;
}
}
return true;
}
};
```
超越97%继续加油
进阶情况如果有Unicode字符,那么将数组改为a[128]b[128]因为Unicode字符一共有127个而a~z是97到122,同样进行储存,并且比较时仅仅比较97到122即可
代码如下:
```cpp
class Solution {
public:
bool isAnagram(string s, string t) {
int a[128],b[128],i;//将整个ascii表都作为数组
memset(a, 0, sizeof(a));//初始化时要用sizeof()来进行初始化不然会报错
memset(b, 0, sizeof(b));
for(i=0;i<s.length();i++){
a[s[i]]++;
}//利用数组来对二十六个字母出现的次数进行统计
for(i=0;i<t.length();i++){
b[t[i]]++;
}
for(i=97;i<=122;i++){
if(a[i]!=b[i]){
return false;
break;
}
}
return true;
}
};
```