该题使用的是哈希表(数组)的方法,关键点在于利用26个字母的ASCII码来映射计数。
时间复杂度:O(n),空间复杂度:O(1)
思路:
- 创建一个长度为26的数组record来记录每个字母出现的次数。
- 首先判断字符串s和t的长度是否相同,如果长度不相同则一定不是字母异位词。
- 如果长度相同,则遍历字符串s,对于其中的每个字符,将record数组对应的位置加1。
- 然后遍历字符串t,对于其中的每个字符,将record数组对应的元素减1。
- 最后遍历record数组,如果所有元素都为0,那么字符串s和t就是字母异位词,返回true,否则返回false。
代码:
class Solution {
public:
bool isAnagram(string s, string t) {
int record[26] = {0};
if (s.size() != t.size())
return false;
for (int i = 0; i < s.size(); i++) {
record[s[i] - 'a']++; // s[i]-'a' is hash function
}
for (int i = 0; i < t.size(); i++) {
record[t[i] - 'a']--; // t[i]-'a' is hash function
}
for (int i = 0; i < 26; i++) {
if (record[i] != 0)
return false;
}
return true;
}
};