解题思路
一道简单题, 首先想到的是用map去做记录所有出现字母的个数和种类
两个数组的map做比对就为正确答案, 确实可行但是超越率只有可怜的5%。
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {
System.out.println("false");
return false;
}
//1、存入两个map
Map<Character,Integer> maps = new HashMap<>();
Map<Character,Integer> mapt = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char tmps = s.charAt(i);
char tmpt = t.charAt(i);
maps.put(tmps, maps.getOrDefault(tmps,0)+1);
mapt.put(tmpt, mapt.getOrDefault(tmpt,0)+1);
}
//2、对比两个map的值
for(Map.Entry<Character,Integer> entry:maps.entrySet()) {
int ns = entry.getValue();
int nt = mapt.getOrDefault(entry.getKey(),0);
if(ns!=nt) {
//System.out.println("false");
return false;
}
}
return true;
}
}
遗忘了一点无论是大写字符还是小写字符都像数字一样是可以排序的。
而java中Arrays又恰恰提供了sort()和equals()两个函数直接简化了大量的代码,避免重复造轮子和出错。这里还要感谢leetcode官方题解帮助我运用java的各种函数。
代码
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())
return false;
char[] ss = s.toCharArray();
char[] tt = t.toCharArray();
Arrays.sort(ss);
Arrays.sort(tt);
return Arrays.equals(ss,tt);
}
}