首页 > 其他分享 >LeetCode:NO.242有效的字母异位词

LeetCode:NO.242有效的字母异位词

时间:2022-12-05 09:15:04浏览次数:79  
标签:NO.242 26 hash 异位 字母 数组 两串 LeetCode

题目链接

代码随想录

LeetCode

 

题目描述

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

注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。

示例 1:

输入: s = "anagram", t = "nagaram"
输出: true

示例 2:

输入: s = "rat", t = "car"
输出: false

提示:

  • 1 <= s.length, t.length <= 5 * 104
  • s 和 t 仅包含小写字母

进阶: 如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

 

解题思路

本题是让判断两字符串是否为字母异位词,即两串中出现的字母次数是否相同。如 “hi” 和 “hii” 就不符合。

本题我们有两种思路解题,一种是将两串中的元素进行排序,然后依次比较;另一种就要用到哈希表的知识。

哈希表有三种常见的结构:

数组

set(集合)

map(映射)

在这里,我们选择数组,因为串的字母组成较少,只有26个,我们只需定义大小为26的int数组即可。

首先判断两串的长度是否相等,若不相等,则必定不满足题意,返回false。

再依次遍历两个串中的每个元素:

hash[s[i]-'a']++ ,这句代码的意思是将串s的第i个位置上的字母的ASCII值与a做差值然后作为数组下标传给hash数组。若第一个字母为a则hash[0]++;若为b,则hash[1]++。

hash[t[i]-'a']-- ,两个串同时遍历,遇到字母,一个对hash数组对应位置进行加操作,一个进行减操作。

当两个串遍历完后,若hash数组某一位置不为0,则说明两串有不相同的字母,即不满足字母异位词。

 

代码实现

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

 

标签:NO.242,26,hash,异位,字母,数组,两串,LeetCode
From: https://www.cnblogs.com/yihong-song/p/16951404.html

相关文章

  • leetcode_D5_67二进制求和
    1.题目  2.解一  主要思路:自己的解法,主要思路就是先给短的字符串前面补0,然后把两个字符串逐位加起来,再依次判断,如果=2就减去2,然后下一位+1。写的过于繁琐了。3.......
  • leetcode 1774. 最接近目标价格的甜点成本
    1774.最接近目标价格的甜点成本难度中等133收藏分享切换为英文接收动态反馈你打算做甜点,现在需要购买配料。目前共有 n 种冰激凌基料和 m 种配料可供选购。而制......
  • leetcode 101. 对称二叉树 js实现
    给你一个二叉树的根节点 root ,检查它是否轴对称。示例1:输入:root=[1,2,2,3,4,4,3]输出:true示例2:输入:root=[1,2,2,null,3,null,3]输出:false 提示:树......
  • leetcode 6256. 将节点分成尽可能多的组 二分图判定+bfs+并查集
    6256.将节点分成尽可能多的组难度困难7收藏分享切换为英文接收动态反馈给你一个正整数 n ,表示一个 无向 图中的节点数目,节点编号从 1 到 n 。同时给你一个......
  • #yyds干货盘点# LeetCode程序员面试金典:零矩阵
    题目:编写一种算法,若M×N矩阵中某个元素为0,则将其所在的行与列清零。 示例1:输入:[ [1,1,1], [1,0,1], [1,1,1]]输出:[ [1,0,1], [0,0,0], [1,0,1]]示例2:输入:[......
  • 力扣 leetcode 209. 长度最小的子数组
    问题描述给定一个含有n个正整数的数组和一个正整数target。找出该数组中满足其和≥target的长度最小的连续子数组[numsl,numsl+1,...,numsr-1,numsr],并返......
  • LeetCode刷题记录.Day31
    二叉树的层序遍历递归法classSolution{public:voidorder(TreeNode*cur,vector<vector<int>>&result,intdepth){if(cur==nullptr)retur......
  • Leetcode刷题第五周
    二叉树:种类:满二叉树、完全二叉树、二叉搜索树、平衡二叉搜索树存储方式:链式存储、线式存储(顺序存储)二叉数遍历:深度优先搜索(前序、中序、后序):使用递归实现(实际用栈来实现......
  • LeetCode:NO.142环形链表Ⅱ
    题目描述给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表......
  • 力扣 leetcode 547. 省份数量
    问题描述有n个城市,其中一些彼此相连,另一些没有相连。如果城市a与城市b直接相连,且城市b与城市c直接相连,那么城市a与城市c间接相连。省份是一组直接或间接......