【LeetCode242.有效的字母异位词】——哈希表

242.有效的字母异位词

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

示例 1:

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

示例 2:

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

提示:

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

题目链接

思路:

本题是判断两个字符串中的所含的元素是否相同,遇到这类匹配相关的问题,很容易就能够想到运用哈希表来进行求解。又由于是仅仅包含小写字母,所以可以采用数组形式的字符串,定义大小为26就足够了,用于存储每个元素出现的次数。

而另一种方法就是通过将两个字符串分别进行排序,这是一种相对暴力地解法,若所含元素相同,个数也相同,那么在排序过后,两个字符串应该是一模一样的。

哈希表:

class Solution {
public:
    bool isAnagram(string s, string t) {
        int arr[26] = { 0 };
        for (int i = 0; i < s.size(); i++) //遍历字符串s,给哈希表赋值
        {
            arr[s[i] - 'a']++; //字符以ASCII码形式传入
        }
        for (int i = 0; i < t.size(); i++) //遍历字符串t,调整哈希表中值
        {
            arr[t[i] - 'a']--;
        }
        for (int i = 0; i < 26; i++)
        {
            if (arr[i] != 0) //判断哈希表是否全为0
            {
                return false;
            }
        }
        return true;
      
    }
};

值得一提的是,这里的字符是以ASCII码的形式传入的,通过减去’a’,我们可以让a字符对应数组中的0位置,b字符对应1,以此类推。

排序:

class Solution {
public:
    bool isAnagram(string s, string t) {
        if (s.size() != t.size()) {
            return false; //首先判断长度是否相同
        }
        sort(s.begin(), s.end());
        sort(t.begin(), t.end());
        return s == t;
    }
};

首先可以判断长度是否相同,若是长度不同,那必定不符合题意。接着就进行排序,进而比较。

往期回顾:
LeetCode977.有序数组的平方
LeetCode844.比较含退格的字符串
LeetCode283.移动零
LeetCode27.移除元素
LeetCode26.删除有序数组中的重复项
LeetCode209.长度最小的子数组
LeetCode904. 水果成篮

你可能感兴趣的:(LeetCode学习笔记,散列表,算法,leetcode,哈希算法,数据结构)