leetcode242. 有效的字母异位词(java)

public static boolean isAnagram(String s, String t) {
        if (s.equals(t)) {
            return true;
        } else if (null == s || null == t || s.length() != t.length() || s.length() <= 0) {//如果长度不相等,直接返回
            return false;
        }
        Map smap = new HashMap<>();
        chechString(s, smap);
        for (int i = 0; i < t.length(); i++) {
            if (smap.containsKey(t.charAt(i))) {
                smap.put(t.charAt(i), smap.get(t.charAt(i)) - 1);
                if (0 == smap.get(t.charAt(i))) {
                    smap.remove(t.charAt(i));
                }
            }
        }

        return smap.size() == 0;
    }

    private static void chechString(String s, Map smap) {
        for (int i = 0; i < s.length(); i++) {
            if (smap.containsKey(s.charAt(i))) {
                smap.put(s.charAt(i), smap.get(s.charAt(i)) + 1);
            } else {
                smap.put(s.charAt(i), 1);
            }
        }
    }

思路:

  1. 通过循环将左字符串中的每个字符作为key存入HashMap中,默认为1,有相同的key时,value+1.
  2. 根据右字符串的长度进行循环,对比HashMap中的值,配对成功value-1,不成功直接返回false.
  3. 当value的值为0时,从HashMap中移除。
  4. 最终判断HashMap的长度,如果为零证明符合题意。

ps:

先判断左右字符串是否相同,相同直接返回true;

再判断左右字符串是否为null,长度是否大于0,程度是否相等,如果其中一项不满足,直接返回false;

 

 

 

你可能感兴趣的:(leetcode算法研究)