政府网站建设与电子政务seo标题优化的方法
文章目录
- 题目链接:
- 题目描述:
- 解法
- C++ 算法代码:
题目链接:
面试题 01.02. 判定是否互为字符重排
题目描述:
解法
解法一:暴力解法
找出字符串的全排序,然后比较是否相同(指数级别的,太恐怖了)
解法二:哈希表
统计每个字符出现的次数。次数相同就是字符重排。
这里是用数组模拟哈希表,用容器的话会麻烦一点。
C++ 算法代码:
class Solution
{
public:bool CheckPermutation(string s1, string s2) {// 首先检查两个字符串长度是否相等// 如果长度不同,它们不可能互为重排列if(s1.size() != s2.size()) return false;// 创建一个大小为26的整型数组作为哈希表// 用于统计小写字母a-z出现的次数int hash[26] = { 0 };// 第一步:遍历第一个字符串,统计每个字符出现的次数for(auto ch : s1)hash[ch - 'a']++; // 将字符转换为0-25的索引并增加计数// 第二步:遍历第二个字符串,减少对应字符的计数for(auto ch : s2){hash[ch - 'a']--; // 将字符转换为0-25的索引并减少计数// 如果任何字符的计数变为负数,说明s2中某个字符出现次数超过了s1// 这意味着两个字符串不可能互为重排列if(hash[ch - 'a'] < 0) return false;}// 如果所有检查都通过,表示两个字符串互为重排列return true;}
};