题目描述:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
方法1:使用数组将字符映射进行出现频率的统计
主要思路:
(1)先比较两个字符串的长度是否一致,若是不一致,则直接返回false;
(2)再将其中的一个字符串 s 使用数组进行映射,统计其中的各个字符出现的频率;
(3)使用统计后的数组,对另一个字符串 t 进行检测,出现某个统计的字符,则将对应的数组元素减一,没出现过,则直接返回false;
(4)由于两个字符串的长度一致,故若是正常跳出循环,则说明两个字符串的组成字符一致,返回true;
class Solution {
public:
bool isAnagram(string s, string t) {
//若是长度不一致,则直接返回
if(s.size()!=t.size())
return false;
//统计字符串中字符的数组
int sign[128]={0};
//统计其中的一个字符串内的字符
for(int i=0;i<s.size();++i){
++sign[s[i]];
}
//检测另一个字符串内的字符
for(int i=0;i<t.size();++i){
if(!sign[t[i]])//若为零,说明字符串 s 中不存在该字符,则直接返回false
return false;
--sign[t[i]];//将统计过的字符数量减少 1
}
return true;//跳出循环后,直接返回true即可
}
};