【算法设计与分析】有效的字母异位词

       个人主页:五敷有你      

 系列专栏:算法分析与设计

⛺️稳中求进,晒太阳

题目

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

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

示例 

示例 1:

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

示例 2:

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

思路


首先判断两个字符串长度是否相等,不相等则直接返回 false
若相等,则初始化 26 个字母哈希表,遍历字符串 s 和 t
s 负责在对应位置增加,t 负责在对应位置减少
如果哈希表的值都为 0,则二者是字母异位词

代码实现

class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr=new int[26];
        for(int i=0;i

运行结果

【算法设计与分析】有效的字母异位词_第1张图片

进阶

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

思路

针对包含Unicode字符的情况,我们需要一种通用的方法来记录字符频率。一种简单有效的方法是使用一个哈希表,其中键是字符,值是该字符在字符串中出现的次数。我们可以遍历字符串,将字符及其出现的次数记录在哈希表中。然后,我们比较两个字符串的哈希表,如果它们相同,则说明两个字符串是字母异位词。

具体步骤如下:

  1. 初始化两个哈希表,分别用于记录两个字符串中字符的出现次数。
  2. 遍历第一个字符串,将字符及其出现次数记录在第一个哈希表中。
  3. 遍历第二个字符串,将字符及其出现次数记录在第二个哈希表中。
  4. 检查两个哈希表是否相同,如果相同则返回true,否则返回false。

这种方法可以处理包含Unicode字符的情况,因为哈希表可以处理任何字符类型的键。

代码实现

class Solution {
    public boolean isAnagram(String s, String t) {
      if (s.length() != t.length()) {
            return false;
        }

        // 初始化两个哈希表,用于存储字符频率
        Map freqS = new HashMap<>();
        Map freqT = new HashMap<>();

        // 计算字符串s的字符频率
        for (char c : s.toCharArray()) {
            freqS.put(c, freqS.getOrDefault(c, 0) + 1);
        }

        // 计算字符串t的字符频率
        for (char c : t.toCharArray()) {
            freqT.put(c, freqT.getOrDefault(c, 0) + 1);
        }

        // 检查两个哈希表是否相同
        return freqS.equals(freqT);
    }
}

运行结果

【算法设计与分析】有效的字母异位词_第2张图片

你可能感兴趣的:(算法分析与设计,java,开发语言,leetcode,数据结构,算法)