Problem 242: Valid Anagram

https://leetcode.com/problems/valid-anagram/

思路

  • 这道题至少有两种思路:第一种就是先拆分成数组,然后再转化为 String,比较两个 String 是否相同;第二种就是遍历的方法。

  • 第一种方法速度很快,但是可能并不是面试官想要看的

  • 最优解放在最上面

/*
  最优解
*/
public class Solution {
    public boolean isAnagram(String s, String t) {
        int[] arr = new int[26];

        for (int i = 0; i < s.length(); i++) {
            arr[s.charAt(i) - 'a']++;
        }
        for (int i = 0; i < t.length(); i++) {
            arr[t.charAt(i) - 'a']--;
        }

        for (Integer count : arr) {
            if (count != 0) {
                return false;
            }
        }

        return true;
    }
}
/*
  First version
*/
public class Solution {
    public boolean isAnagram(String s, String t) {
        char[] sArr = s.toCharArray();
        char[] tArr = t.toCharArray();
        Arrays.sort(sArr);
        Arrays.sort(tArr);

        return String.valueOf(sArr).equals(String.valueOf(tArr)); 
    }
}
/*
  Second version
*/
public class Solution {
    public boolean isAnagram(String s, String t) {
        HashMap<Character, Integer> hm = new HashMap<Character, Integer>();
        char[] sArr = s.toCharArray();
        char[] tArr = t.toCharArray();

        for (Character c : sArr) {
            if (hm.containsKey(c)) {
                hm.put(c, hm.get(c) + 1);
            } else {
                hm.put(c, 1);
            } 
        }

        for (Character c : tArr) {
            if (hm.containsKey(c)) {
                hm.put(c, hm.get(c) - 1);
            } else {
                return false;
            }
        }

        for (Integer value : hm.values()) {
            if (value != 0) {
                return false;
            } 
        }

        return true;
    }
}

易错点

1.注意如果 map 里面没有该元素的时候,put 的个数是 1

hm.put(c, 1);

Last updated