
一、题目描述

二、算法原理
思路:哈希表统计字符串里每个字符的个数

这道题我使用的是用一个数组来模拟哈希表(原因:效率高,而且每个字符串都是小写字母,所以我们可以创建数组:int arr[ 26 ] 来模拟哈希表),我们先把第一个字符串里面的每个字符的个数都放到这个哈希表中,然后再访问第二数组,对第二个数组:我们用第一个数组里面存储的第一个字符串里面的每个字符出现个数减去第二个数组里每个字符出现的个数,如果数组里面的值都为0,那么这个两个字符串符合题目要求;当然前提是两个字符串的长度是一样的,如果不一样,这个两个字符串是绝对不符合题目要求。
三、代码实现
cpp
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
if(s1.size() != s2.size()) return false;//两个字符串的长度都不一样,那么直接返回false
int num[26] = {0};//数组模拟哈希表
for(auto& e : s1)//把 s1 的每个字符个数都放到这个数组里面
{
char ch = e - 'a';
num[ch]++;
}
for(auto& e : s2)//让 s2 的每个字符个数减去 s1 的字符串的每个字符的个数
{
char ch = e - 'a';
num[ch]--;
}
for(auto& e : num)//如果数组里面的数据都为 0 ,那么这两个字符串满足题目要求
{
if(e != 0) return false;
}
return true;
}
};