leetcode-代码随想录-哈希表-有效的字母异位词

题目

题目链接:242. 有效的字母异位词 - 力扣(LeetCode)

给定两个字符串 st ,编写一个函数来判断 t 是否是 s 的 字母异位词。

复制代码
输入: s = "anagram", t = "nagaram"
输出: true

输入: s = "rat", t = "car"
输出: false
c++ 复制代码
class Solution {
public:
    bool isAnagram(string s, string t) {
        
    }
};
思路 & 代码

哈希问题常采用的数据结构:

  • 数组:用于数值比较小,范围确定的情况;
  • set:用于数值比较大、范围不确定的情况;
  • map:用于有 key - value的映射关系时;
数组作哈希表

题目分析:判断两个字符串是否由相同的字符串组成。

  1. st 仅包含小写字母 ------ 26个;
  2. 小写字母的ASCII是连续的;

所以使用数组 即可,大小为26,存放的是从 a 到 z 每个字母出现的频率。

代码实现思路

将字符 映射到数组也就是哈希表的索引下标上。

  1. 定义一个数组 record,大小为 26,初始化为 0;用于记录 字符串中 字符出现的次数。
  2. 怎么记录呢?
    • 因为 字符 a 到字符 z 的ASCII是连续的数值,在运行中会自动将 'a'转换为ASCII值。
    • 使用 s[i] - 'a' 操作:若s[i] = 'a' ,就映射到下标0,若s[i] = 'b',映射到下标1,...,若s[i] = 'z',映射到下标 25。
  3. 遍历字符串 s,使用 record[s[i] - 'a']++记录字符出现的频率
  4. 遍历字符串 t,使用 record[t[i] - 'a']--记录字符出现的频率
  5. 遍历 record数组,若数组所有元素均为 0, 说明是字母移位词,否则不是。
c++ 复制代码
#include <iostream>
#include <string>
using namespace std;

class Solution {
public:
    bool isAnagram(string s, string t) {
        int record[26] = {0};
        for(int i = 0; i < s.size(); i++){
            record[s[i] - 'a']++;
        }

        for(int i = 0; i < t.size(); i++){
            record[t[i] - 'a']--;
        }

        for(int i = 0; i < 26; i++){
            if(record[i] != 0){
                return false;
            }
        }
        return true;
    }
};

int main(){
    string s, t;
    cin >> s;
    cin >> t;

    cout << s << endl;
    cout << t << endl;

    Solution obj;
    bool res = obj.isAnagram(s,t);

    cout << boolalpha;
    cout << "res: " << res << endl;

}

时间复杂度:O(n);

空间复杂度:O(1);

相关推荐
aini_lovee14 分钟前
多目标粒子群优化(MOPSO)双适应度函数MATLAB实现
人工智能·算法·matlab
yong999022 分钟前
图像融合与拼接:完整MATLAB工具箱
算法·计算机视觉·matlab
春风不语50524 分钟前
深入理解主成分分析(PCA)
算法
apollowing25 分钟前
启发式算法WebApp实验室:从搜索策略到群体智能的能力进阶(二十二)
算法·启发式算法·web app
晚枫歌F30 分钟前
最小堆定时器
数据结构·算法
Lumos_7771 小时前
Linux -- 线程
java·jvm·算法
七颗糖很甜2 小时前
“十五五”气象发展规划:聚焦五大核心任务
大数据·python·算法
科研前沿2 小时前
镜像视界浙江科技有限公司的关键技术突破有哪些?
大数据·人工智能·科技·算法·音视频·空间计算
嫩萝卜头儿2 小时前
2 - 复杂度收尾 + 链表经典OJ
数据结构·算法·链表·复杂度
星马梦缘2 小时前
算法设计与分析 作业二 答案与解析
算法·图论·dfs·bfs·floyd-warshall·bellman_ford·多源最短路