LeetCode 242 有效的字母异位词

131 阅读1分钟
题目: 给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词

 解题思路: 

1. 字母异位词就是相同的字母构成了不同的单词

 2. 如果两个字符串的长度不一样就肯定不是字母异位词 

3. 判断是否拥有相同的字符和字符出现的次数是否相同

代码实现:

方法一:将两个字符串中的字符排序,然后比较字符数组是否相同

    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()){
            return false;
        }
        char[] sChar = s.toCharArray();
        char[] tChar = t.toCharArray();
        Arrays.sort(sChar);
        Arrays.sort(tChar);

        String tempS = String.valueOf(sChar);
        String tempT = String.valueOf(tChar);

        if (tempS.equals(tempT)){
            return true;
        }else {
            return false;
        }
    }

方法二:记录每个字符出现的次数,如果出现次数相同则为字母异位词

我们需要两个计数器数表进行比较吗?实际上不是,因为我们可以用一个计数器表计算 ss 字母的频率,用 tt 减少计数器表中的每个字母的计数器,然后检查计数器是否回到零。

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