Skip to content

Latest commit

 

History

History
64 lines (58 loc) · 1.96 KB

242. 有效的字母异位词.md

File metadata and controls

64 lines (58 loc) · 1.96 KB

Meta


Trick:ASCII 编码表示的字符可直接映射到 int 型数组中,用 ASCII 码映射为数组下标。

class Solution {
    // 判断字符曾经出现过的次数是否一致
    public boolean isAnagram(String s, String t) {
        // Map key 字符 val 出现次数
        if (s.length() != t.length()) return false;
        Map<Character, Integer> map = new HashMap<>();
        for (int i = 0; i < s.length(); i++) {
            map.compute(s.charAt(i), (key, oldVal) -> {
                if (oldVal == null) return 1;
                else return oldVal + 1;
            });
        }
        for (int i = 0; i < t.length(); i++) {
            Integer count = map.get(t.charAt(i));
            if (count == null || count == 0) return false;
            else {
                map.put(t.charAt(i), count - 1);
            }
        }
        return true;
    }

    // 排序、判等
    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);
        return Arrays.equals(schar, tchar);
    }

    // 若 s 和 t 只包含小写字母
    // 小写字母即a-z,对应ascii范围为:97-122
    // 可开辟一个长度为26的连续数组,a字符映射为下标0,b字符映射为下标1,以此类推
    public boolean isAnagram(String s, String t) {
        if (s.length() != t.length()) return false;
        int[] arr = new int[26];
        for (int i = 0; i < s.length(); i++) {
            char ch = s.charAt(i);
            arr[ch - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            char ch = t.charAt(i);
            if (arr[ch - 'a'] == 0) return false;
            else arr[ch - 'a']--;
        }
        return true;
    }
}