# 题目
给定两个字符串 *s*
和 *t*
,编写一个函数来判断 *t*
是否是 *s*
的字母异位词。
** 注意:** 若 *s*
和 *t*
中每个字符出现的次数都相同,则称 *s*
和 *t*
互为字母异位词。
说明: 你可以假设字符串只包含小写字母。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
242. 有效的字母异位词 - 力扣(LeetCode)
# 分析
定义一个大小为 26 的数组 record 来记录每个字符出现的次数
先遍历一个字符串,出现的字符 ++,然后遍历另一个字符串,对应的字符 --,
最后遍历数组,有值不为零则不是字母异位词。
class Solution { | |
public: | |
bool isAnagram(string s, string t) { | |
int record[26] = {0}; | |
for (int i = 0; i < s.size(); i++) { | |
// 并不需要记住字符 a 的 ASCII,只要求出一个相对数值就可以了 | |
record[s[i] - 'a']++; | |
} | |
for (int i = 0; i < t.size(); i++) { | |
record[t[i] - 'a']--; | |
} | |
for (int i = 0; i < 26; i++) { | |
if (record[i] != 0) { | |
//record 数组如果有的元素不为零 0,说明字符串 s 和 t 一定是谁多了字符或者谁少了字符。 | |
return false; | |
} | |
} | |
//record 数组所有元素都为零 0,说明字符串 s 和 t 是字母异位词 | |
return true; | |
} | |
}; |