【剑斩OFFER】算法的暴力美学——面试题 01.02 :判定是否互为字符串重排

一、题目描述

二、算法原理

思路:哈希表统计字符串里每个字符的个数

这道题我使用的是用一个数组来模拟哈希表(原因:效率高,而且每个字符串都是小写字母,所以我们可以创建数组:int arr 26 来模拟哈希表),我们先把第一个字符串里面的每个字符的个数都放到这个哈希表中,然后再访问第二数组,对第二个数组:我们用第一个数组里面存储的第一个字符串里面的每个字符出现个数减去第二个数组里每个字符出现的个数,如果数组里面的值都为0,那么这个两个字符串符合题目要求;当然前提是两个字符串的长度是一样的,如果不一样,这个两个字符串是绝对不符合题目要求。

三、代码实现

cpp 复制代码
class Solution {
public:
    bool CheckPermutation(string s1, string s2) {
        if(s1.size() != s2.size()) return false;//两个字符串的长度都不一样,那么直接返回false
        int num[26] = {0};//数组模拟哈希表
        for(auto& e : s1)//把 s1 的每个字符个数都放到这个数组里面
        {
            char ch = e - 'a';
            num[ch]++;
        }
        for(auto& e : s2)//让 s2 的每个字符个数减去 s1 的字符串的每个字符的个数
        {
            char ch = e - 'a';
            num[ch]--;
        }
        for(auto& e : num)//如果数组里面的数据都为 0 ,那么这两个字符串满足题目要求
        {
            if(e != 0) return false;
        }
        return true;
    }
};
相关推荐
赴生-3 分钟前
C++进阶 C++11(下)
开发语言·c++
有点。7 分钟前
C++(贪心算法一)
c++·贪心算法
Matrix_1116 分钟前
手机里的计算摄影:广角形变校正算法
人工智能·算法·智能手机·计算摄影
WBluuue20 分钟前
数据结构与算法:有序表(二):跳表
数据结构·c++·算法·skiplist
IT龟苓膏38 分钟前
并发深度解析】硬核手撕 ForkJoinPool + WorkStealing + CompletableFuture 底层源码与大厂面试演练
面试·职场和发展
赴生-1 小时前
C++进阶 异常
开发语言·c++
x138702859572 小时前
c语言中srtlen(指针使用计算字符长度)、传值和传址调用
c语言·开发语言·算法·visual studio
海兰2 小时前
【实用程序】电商销售分析仪表盘 — 从零搭建一个AI参与的全栈数据洞察系统
人工智能·学习·算法
凡人叶枫2 小时前
Effective C++ 条款28:避免使用 handles 指向对象内部
linux·服务器·开发语言·c++·嵌入式开发
zwenqiyu2 小时前
P5283 [十二省联考 2019] 异或粽子题解
c++·学习·算法