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

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

相关推荐
AlenTech1 天前
208. 实现 Trie (前缀树) - 力扣(LeetCode)
leetcode
iAkuya1 天前
(leetcode)力扣100 36二叉树的中序遍历(迭代递归)
算法·leetcode·职场和发展
wangwangmoon_light1 天前
1.1 LeetCode总结(线性表)_枚举技巧
算法·leetcode·哈希算法
码农小韩1 天前
基于Linux的C++学习——动态数组容器vector
linux·c语言·开发语言·数据结构·c++·单片机·学习
有一个好名字1 天前
力扣-小行星碰撞
算法·leetcode·职场和发展
hui函数1 天前
如何解决 pip install 编译报错 g++: command not found(缺少 C++ 编译器)问题
开发语言·c++·pip
CSDN_RTKLIB1 天前
【std::vector】clear介绍
c++·stl
XiaoHu02071 天前
Linux多线程(详细全解)
linux·运维·服务器·开发语言·c++·git
苏宸啊1 天前
C++(二)类和对象上篇
开发语言·c++