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

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

相关推荐
草莓熊Lotso15 分钟前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
Andy18 分钟前
Cpp进阶语法详解
c++
此生决int1 小时前
深入理解C++系列(04)——类和对象(下)
开发语言·c++
2601_9545267511 小时前
【工业传感与算法实战】温漂补偿与零点抗漂破局:基于二阶多项式拟合的 C/C++ 边缘校准算法,深度拆解“压力变送器什么牌子好”的技术硬指标
c语言·c++·算法
code_pgf12 小时前
`unordered_map` 详解
c++
一拳一个呆瓜14 小时前
【STL】iostream 编程:检测提取操作产生的错误
c++·stl
稚南城才子,乌衣巷风流14 小时前
判断素数与拓展应用
c++
众少成多积小致巨14 小时前
C++ 规范参考(下)
c++
c2385614 小时前
把 C++ 内存分配拆透:new 与 malloc 的三层血缘
开发语言·c++·算法
txzrxz15 小时前
最短路问题——Dijkstra 算法
数据结构·c++·算法·最短路·优先队列