算法案例之有效字母异位词

2021年1月15日 85点热度 0条评论 来源: 小Wang_start

本题参考力扣题解写的理解思路,原文请参照力扣官网242题
https://leetcode-cn.com/problems/valid-anagram/
题目:
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。

示例 1:
输入: s = “anagram”, t = “nagaram”
输出: true
示例 2:
输入: s = “rat”, t = “car”
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?

法一:
Arrays工具类的使用

class Solution { 
    public boolean isAnagram(String s, String t) { 
            //也就是说判断S中出现的字母,是不是t的字符串,顺序不一样而已
            if(s.length()!=t.length())
            { 
                return false;
            }
            char[] str1 = s.toCharArray();
            char[] str2 = t.toCharArray();
            Arrays.sort(str1);
            Arrays.sort(str2);
            boolean flag = Arrays.equals(str1,str2);
            return flag;
    }
}

这个工具类的使用就是先把字符串全部转换,赋值复制一组副本到新的字符数组中,再利用我们的Arrays类中的排序方法,让这个字符数组进行排序,最后在进行比较看看对应位置上的字符是不是一样的。

方法二:
哈希表

public class IsAnagram { 
    public static boolean isAnagram(String s, String t) { 
        if (s.length() != t.length()) { 
            return false;
        }
        int[] table = new int[26];
        for (int i = 0; i < s.length(); i++) { 
            table[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) { 
            table[t.charAt(i) - 'a']--;
            if (table[t.charAt(i) - 'a'] < 0) { 
                return false;
            }
        }
        return true;
    }

    public static void main(String[] args) { 
        String s = "anagram";
        String t ="nagaram";
        System.out.println(isAnagram(s, t));
    }
}

这个方法的意思就是,我们创建一个哈希表table,里面代表着26个英文字母,我们s中一个字母出现一次,我们就在相应的位置+1,反过来t就是减一,出现负数,那就说明,a中没有出现那个位置对应的字母

    原文作者:小Wang_start
    原文地址: https://blog.csdn.net/qq_22155255/article/details/109961780
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系管理员进行删除。