242. 有效的字母异位词
题意:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
解题思路:
运用哈希表,因为小写字母的个数只有26个,所以可以用数组当做哈希表。
- 先判断长度是否相等,这样可以省略后面字母个数不同带来的麻烦。
- 定义一个26长度的数组,初始化为0.
- 遍历第一个字符串,每次读取一个字符然后让对应位置的个数加1。a的ASCLL码为97,让每个字符都减去97就可以得到小写字母从0~25.
- 然后遍历第二个字符串,判断对应的位置是否为0,是就说明有不同的字母,返回false,如果不是就让对应位置的数字-1。
- 如果都正确说明两个字符串只是相异位,返回true。
代码:
class Solution {
public:
bool isAnagram(string s, string t) {
int a[26] = { 0 };
if (s.length() != t.length()) //判断长度,防止字母个数不同
{
return false;
}
for (const char c : s) //遍历第一个字符串
{
a[c - 97] += 1;
}
for (const char c : t) //遍历第二次判断是否只是相异位
{
if (a[c - 97] == 0)
{
return false;
}
a[c - 97] -= 1;
}
return true;
}
};
运行结果:
总结:
题目不难,需要用到哈希表。因为用的是数组的哈希表,所以速度比较快。