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

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

相关推荐
库玛西33 分钟前
深入浅出传输层:UDP 与 TCP 协议全景指南
linux·服务器·网络·c++·笔记·tcp/ip·udp
Chester_19997 小时前
CSP202203C.计算资源调度器
开发语言·数据结构·c++·蓝桥杯
会周易的程序员8 小时前
给 PLC 写一个字节码虚拟机:STVM 虚拟机架构设计
开发语言·c++·虚拟机·软plc·iec61131·stvm
小灰灰搞电子8 小时前
完全驾驭 Qt 与数据库:C++ ORM 框架 QxOrm 原理与实践指南
数据库·c++·qt
QT界面美化性能优化9 小时前
QT+AI:使用AI技术为QT应用程序赋能
c++·人工智能·qt·opencv·qt教程·qt6.3
学习星球11 小时前
单调栈——从“找下一个更大的“到柱状图中的最大矩形
数据库·c++·算法·leetcode·xcode
小灰灰搞电子11 小时前
C++ 引用折叠详解
c++
布莱克60512 小时前
数组详解:定义、作用、应用场景及与链表的区别(C/C++ 代码讲解)
c语言·开发语言·c++·数组
牛油果子哥q13 小时前
C++内存池与对象池精讲:内存碎片、自定义分配器、对象池实现、STL allocator原理、工程落地与性能对比
java·开发语言·c++
万法若空13 小时前
C/C++ 类型别名定义方式对比
java·c语言·c++