哈希表-面试题01.02.判定是否互为字符重排-力扣(LeetCode)

一、题目解析

1、例如s1="abc",s2="bca",s2重排后"abc",返回true

2、s1和s2的长度为[0,100]

二、算法原理

解法:哈希表 O(N)

使用容器unordered_map显然过于笨重,我们可以注意到题目的字眼,小写字母,我们可以转而使用大小为26的数组模拟哈希表

1、使用两个哈希表 空间O(52)

分别统计s1和s2,然后循环比对,只要不相等就可以返回false,全部相同才为true

2、使用一个哈希表 空间O(26)

在统计s1或s2的基础上,统计s1或s2,统计前一个是加法,后一个做减法,并判断当<0,则返回false

细节:可以在开始对长度特判,如果s1.size()!=s2.size(),直接返回false

三、代码示例

cpp 复制代码
class Solution {
public:
    bool CheckPermutation(string s1, string s2)
    {
        if(s1.size()!=s2.size()) return false;
        int hash[26] = {0};
        for(auto ch : s1)
        {
            hash[ch-'a']++;
        }
        for(auto ch : s2)
        {
            hash[ch-'a']--;
            if(hash[ch-'a'] < 0)
                return false;
        }
        return true;
    }
};

看到最后,如果对您有所帮助,还请点赞、收藏和关注一键三连,我们下期再见!

相关推荐
緈福的街口3 小时前
【leetcode】130. 被围绕的区域
算法·leetcode·职场和发展
ajassi20003 小时前
开源 C++ QT Widget 开发(十二)图表--环境监测表盘
c++·qt·开源
zc.ovo3 小时前
牛子图论1(二分图+连通性)
数据结构·c++·算法·深度优先·图论
zzx_blog4 小时前
c++ 设计模式之CRTP
c++
珹洺4 小时前
C++从入门到实战(二十一)List迭代器实现
开发语言·c++·list
Q741_1474 小时前
C++ 面试高频考点 力扣 162. 寻找峰值 二分查找 题解 每日一题
c++·算法·leetcode·面试·二分查找
j_xxx404_4 小时前
数据结构:栈和队列(上)
c语言·数据结构·算法·leetcode
海梨花4 小时前
字节跳动后端 一面凉经
java·redis·学习·leetcode·面经
墨染点香4 小时前
LeetCode 刷题【62. 不同路径】
算法·leetcode·职场和发展
m0_552200825 小时前
《UE5_C++多人TPS完整教程》学习笔记47 ——《P48 瞄准行走(Aim Walking)》
c++·游戏·ue5