链接:https://leetcode.cn/problems/check-permutation-lcci/solution/-by-xun-ge-v-ntnr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
题目
思路
对于两个字符串 s1 和 s2 ,如果一个字符串的字符重新排列后,能变成另一个字符串只需要一个前提条件:
- 对于 s1 和 s2 中所有字符出现的次数相同
其实本题就相当于问 两个字符串中出现字符元素次数是否相同
解决这个问题一般有两种方法:
- 排序 -> 逐一比较
- 哈希表 -> 判断相同字符出现的次数
对于哈希表,我们可以使用库函数,当然也可以使用哈希数组,对于本题明显使用哈希数组更方便,因为所有字符加起来才 26 个 ,密度相当集中
代码
bool CheckPermutation(char* s1, char* s2){
int hash1[26];
int hash2[26];
memset(hash1, 0, sizeof(int) * 26);
memset(hash2, 0, sizeof(hash2));
int len1 = strlen(s1);
int len2 = strlen(s2);//初始化
for(int i = 0; i < len1; i++)//记录s1中字符出现的次数
{
hash1[s1[i] - 'a']++;
}
for(int i = 0; i < len2; i++)//记录s2中字符出现的次数
{
hash2[s2[i] - 'a']++;
}
for(int i = 0; i < 26; i++)//比较相同字符出现的次数
{
if(hash1[i] != hash2[i])
return false;
}
return true;
}
作者:xun-ge-v
链接:https://leetcode.cn/problems/check-permutation-lcci/solution/-by-xun-ge-v-ntnr/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。