当前位置: 首页 > news >正文

【C++算法】57.哈希表_判断是否互为字符重排

文章目录

    • 题目链接:
    • 题目描述:
    • 解法
    • C++ 算法代码:


题目链接:

面试题 01.02. 判定是否互为字符重排


题目描述:

1408a58b2bbde5420ce82c9453bf990e


解法

解法一:暴力解法

找出字符串的全排序,然后比较是否相同(指数级别的,太恐怖了)

解法二:哈希表

统计每个字符出现的次数。次数相同就是字符重排。

这里是用数组模拟哈希表,用容器的话会麻烦一点。


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;
    }
};

相关文章:

  • AF3 Cropper类解读
  • 音视频转换器 AV 接口静电保护方案
  • 状态压缩dp
  • Odrive源码分析(六) 相关控制变量传递
  • 基于redis 实现我的收藏功能优化详细设计方案
  • HCIP第十一天
  • 攻防世界——Web题ez_curl
  • 代码学习总结(二)
  • AIDD-人工智能药物-pyecharts-gallery
  • 滑动窗口(4)—将x减到0的最⼩操作数
  • 基于时间序列分解与XGBoost的交通通行时间预测方法解析
  • x265 编码参数 rdLevel 详细解析
  • buuctf sql注入类练习
  • UITableVIew性能优化概述
  • 【DE2-115】Verilog实现DDS+Quartus仿真波形
  • 【算法】One-Stage检测器与Two-Stage检测器的原理和区别
  • 开启bitlocker使用windows的加密功能
  • (1)VTK环境配置
  • Unity 基于navMesh的怪物追踪惯性系统
  • CAP理论 与 BASE理论
  • 做网站 用什么做数据库最好/百中搜优化
  • 电子商务网站开发/国际新闻大事
  • 怎么做企业的网站/sem推广软件