给定两个字符串 s 和 t (均为小写),编写一个函数来判断 t 是否是 s 的字母异位词,若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
1.暴力求解
使用for循环分别判断每个字母在两个字符串出现次数。
时间复杂度为O(n^2)。
2.哈希解法
分别统计字符串s和t中字符出现的个数,并保存在a、b两个数组中,通过比较两个数组是否相同判断是否互为字母异位词。
哈希解法的关键是将字符转化为数组的下标,可以使用 int (s[i]-'a') 进行初始化,这样可以减少时间复杂度。
时间复杂度为O(n),空间复杂度为O(1)。
bool isAnagram(string s, string t) {
int ss = s.length(), tt = t.length();
int a[26] = {0};
int b[26] = {0};
vector<int> b(vector<int> (ss));
for (int i = 0; i<ss; i++) {
int m = int(ss[i] - 'a');
a[m] ++;
}
for (int j = 0; j<tt; j++) {
int n = int(tt[j] - 'a');
b[n] ++;
}
for (int i = 0;i<26; i++) {
if (a[i] != b[i]) return false;
}
return true;
}