哈希表-面试题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;
    }
};

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

相关推荐
apocelipes1 天前
常用编程语言和库的正则表达式性能对比
c语言·c++·python·性能优化·golang·开发工具和环境
郝学胜_神的一滴3 天前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
见过夏天3 天前
C++ 基础入门完全指南
c++
用户805533698035 天前
不止三件套:QObject 属性系统全关键字与运行时反射!
c++·qt
To_OC5 天前
LC 207 课程表:刚学图论那会儿,我连这是拓扑排序都没看出来
javascript·算法·leetcode
To_OC5 天前
LC 208 实现 Trie 前缀树:曾被名字劝退,写完发现是送分题
javascript·算法·leetcode
BadBadBad__AK5 天前
线段树维护区间 k 次方和
c++·数学·算法·stl
卷无止境6 天前
Eigen 库如何借助 OpenMP 加速计算
c++·后端
卷无止境6 天前
OpenMPI、MPICH 与 OpenMP:关系、核心概念与架构全解
c++·后端
To_OC6 天前
LC 994 腐烂的橘子:人人都说是 BFS 入门题,我却写了三遍才过
javascript·算法·leetcode