当前位置: 首页 > article >正文

力扣[面试题 01.02. 判定是否互为字符重排(哈希表,位图)

Problem: 面试题 01.02. 判定是否互为字符重排

文章目录

  • 题目描述
  • 思路
  • 复杂度
  • Code

题目描述

在这里插入图片描述

思路

思路1:哈希表

1.若两个字符串长度不相等,则一定不符合题意;
2.创建一个map集合,先将字符串s1中的每一个字符与其对应的数量存入集合(字符作为键、其对应的数量作为值);
3.再对于字符串s2,将其字符对应的值依次减去;
4.最后判断map集合中的每一个值,若存在不为0的键则不符合;

思路2:位图

和思路1类似,我们可以直接使用一个数组,作为位图将26个小写字母(题目中说到只包含小写字母)与其对应的个数存入到数组中(与思路1思路类似,也是一个数组加,一个数组减)

复杂度

思路1与2均如下
时间复杂度:

O ( n ) O(n) O(n)

空间复杂度:

O ( n ) O(n) O(n)

Code

思路1:

class Solution {
public:
    /**
     * bitmap
     *
     * @param s1 Given word1
     * @param s2 Given word2
     * @return bool
     */
    bool CheckPermutation(string s1, string s2) {
        int s1Len = s1.length();
        int s2Len = s2.length();
        if (s1Len != s2Len) {
            return false;
        }
        vector<int> alphabet(26);
        for (int i = 0; i < s1Len; ++i) {
            alphabet[s1.at(i) - 97]++;
            alphabet[s2.at(i) - 97]--;
        }
        for (int i = 0; i < alphabet.size(); ++i) {
            if (alphabet[i] != 0) {
                return false;
            }
        }
        return true;
    }
};

思路2:

class Solution {
public:
    /**
     *  Map
     *
     * @param s1 Given word1
     * @param s2 Given word2
     * @return bool
     */
    bool CheckPermutation(string s1, string s2) {
        int s1Len = s1.length();
        int s2Len = s2.length();
        if (s1Len != s2Len) {
            return false;
        }
        unordered_map<char, int> map;
        for (char c: s1) {
            map[c] += 1;
        }
        for (char c: s2) {
            map[c] -= 1;
        }
        for (auto kv: map) {
            if (kv.second != 0) {
                return false;
            }
        }
        return true;
    }
};

http://www.kler.cn/a/234085.html

相关文章:

  • Android使用PorterDuffXfermode模式PorterDuff.Mode.SRC_OUT橡皮擦实现“刮刮乐”效果,Kotlin(2)
  • Hmsc包开展群落数据联合物种分布模型分析通用流程(Pipelines)
  • [Xshell] Xshell的下载安装使用、连接linux、 上传文件到linux系统-详解(附下载链接)
  • C#在自定义事件里传递数据
  • KingbaseES(金仓数据库)入门学习
  • springboot根据租户id动态指定数据源
  • 使用client-only 解决组件不兼容SSR问题
  • 【十四】【C++】list 的常见用法
  • 【Qt 学习之路】在 Qt 使用 ZeroMQ
  • Rust基础拾遗--核心功能
  • 深入探究 HTTP 简化:httplib 库介绍
  • 用EXCEL从地址(上海)中提取各区(浦东新区等区)信息
  • 【笔记】Harmony学习:下载安装 DevEco Studio 开发工具IDE
  • Stable Diffusion 模型下载:GhostMix(幽灵混合)
  • 海外云手机——平台引流的重要媒介
  • NAS如何成为生产力?使用绿联DX4600 Pro搭建图床并实现创作自由
  • Solidworks:平面草图练习
  • 前端小案例——动态导航栏文字(HTML + CSS, 附源码)
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • 机器学习2--逻辑回归(案列)
  • 大数据Flume--入门
  • C 语言学习七:指针
  • 【MySQL题】——基础概念论述(二)
  • 基于YOLOv8算法的照片角度分类项目实践
  • 鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之Web组件
  • 【制作100个unity游戏之23】实现类似七日杀、森林一样的生存游戏10(附项目源码)