
解题思路:有点类似于计数排序,可以把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;
}
};
本文介绍了一种高效的算法来判断两个字符串是否为异位词。通过使用计数排序的思想,将字符串中字母的出现次数存储在一个数组中,然后通过对比两个字符串的字母频率来快速判断它们是否由相同的字母组成。
:242. 有效的字母异位词&spm=1001.2101.3001.5002&articleId=107640156&d=1&t=3&u=68a29ebb106048d68e33b24f93b3e4b0)
676

被折叠的 条评论
为什么被折叠?



