1. 题⽬链接:⾯试01.02.判定是否互为字符重排
2. 题⽬描述:
3. 解法(哈希表):
算法思路:
1. 当两个字符串的⻓度不相等的时候,是不可能构成互相重排的,直接返回false ;
2. 如果两个字符串能够构成互相重排,那么每个字符串中「各个字符」出现的「次数」⼀定是相同 的。因此,我们可以分别统计出这两个字符串中各个字符出现的次数,然后逐个⽐较是否相等即 可。这样的话,我们就可以选择「哈希表」来统计字符串中字符出现的次数。
C++算法代码:
class Solution
{
public:
bool CheckPermutation(string s1, string s2)
{
int hash[26]; //记录26个小写字母出现的次数
//记录出现的次数
for(int i=0;i<s1.size();i++)
{
hash[s1[i]-'a']++;
}
//两个重排的字符串元素出现的次数应该是相等的,所以相减应该是0
for(int i=0;i<s2.size();i++)
{
hash[s2[i]-'a']--;
}
//若有结果不是0的则不是
for(int i=0;i<26;i++)
{
if(hash[i]!=0)
{
return false;
}
}
return true;
}
};
Java算法代码:
class Solution
{
public boolean CheckPermutation(String s1, String s2)
{
if (s1.length() != s2.length()) return false;
int[] hash = new int[26];
// 先把第⼀个字符串的信息统计到哈希表中
for (int i = 0; i < s1.length(); i++)
{
hash[s1.charAt(i) - 'a']++;
}
// 遍历第⼆个字符串,判断是否可以重排
for (int i = 0; i < s2.length(); i++)
{
hash[s2.charAt(i) - 'a']--;
if (hash[s2.charAt(i) - 'a'] < 0) return false;
}
return true;
}
}
标签:hash,int,s2,s1,互为,哈希,重排,字符串
From: https://blog.csdn.net/2301_79580018/article/details/139565684