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<Character, Integer> 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<Character, Integer> 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);
}
}
}
思路:
- 通过循环将左字符串中的每个字符作为key存入HashMap中,默认为1,有相同的key时,value+1.
- 根据右字符串的长度进行循环,对比HashMap中的值,配对成功value-1,不成功直接返回false.
- 当value的值为0时,从HashMap中移除。
- 最终判断HashMap的长度,如果为零证明符合题意。
ps:
先判断左右字符串是否相同,相同直接返回true;
再判断左右字符串是否为null,长度是否大于0,程度是否相等,如果其中一项不满足,直接返回false;