解题思路:有点类似于计数排序,可以把s中出现的字母次数进行存储, 下标对应为字母在字母表中的位置,然后再依次遍历t中的字母进行判断,将出现的字母对应的下标对应的元素值-1,最后判断 数组值是否小于1,如果小于1则false。
class Solution {
public:
bool isAnagram(string s, string t) {
if (s.size() != t.size()) return false;//如果两个字符串的长度不相等则返回false
int wd[26] = {};//用来存储26个小写字符的个数
//先遍历读第一个字符串,如果对应的字符有,则+1;
for (int i = 0; i < s.size(); i++)
wd[s[i] - 'a']++;
//再遍历读第二个字符串,如果对应的字符有,则对应的数组中下标相同的值-1
for (int i = 0; i < t.size(); i++)
if (--wd[t[i] - 'a'] < 0) return false;//若待判断的值减去t的某个字符后小于0则直接返回,把最好情况的复杂度常数项量级降低
return true;
}
};