【力扣专题栏】面试题 01.02. 判定是否互为字符重排,如何利用数组模拟哈希表解决两字符串互排问题?
题解目录
- 1、题目描述+解释
- 2、算法原理解析
- 3、代码编写
- (1)、两个数组分别模拟哈希表解决
- (2)、利用一个数组模拟哈希表解决问题
1、题目描述+解释
2、算法原理解析
3、代码编写
(1)、两个数组分别模拟哈希表解决
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
if(s1.size()!=s2.size())
{
return false;
}
//创建数组
int hash_s1[26]={0};
int hash_s2[26]={0};
//遍历第一个字符串
for(auto e1:s1)
{
hash_s1[e1-'a']++;
}
//遍历第二个字符串
for(auto e2:s2)
{
hash_s2[e2-'a']++;
}
//判断两个哈希里面值是否相等
int i=0;
for(i=0;i<26;i++)
{
if(hash_s1[i]!=hash_s2[i])
{
return false;
}
}
return true;
}
};
(2)、利用一个数组模拟哈希表解决问题
class Solution {
public:
bool CheckPermutation(string s1, string s2) {
//判断个数
if(s1.size()!=s2.size())
{
return false;
}
//创建数组模拟哈希表
int hash[26]={0};
//遍历第一个字符串
for(auto e : s1)
{
hash[e-'a']++;
}
//遍历第二个字符串
for(auto e : s2)
{
hash[e-'a']--;
if(hash[e-'a'] < 0)
{
return false;
}
}
return true;
}
};