一、通过类似冒号排序的形式,将两个String转成char[],通过第一个String对比将第二个String进行排序,排成跟第一个String一样。
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) return false;
char[] str_s = s.toCharArray();
char[] str_t = t.toCharArray();
char temp;
boolean check = false;
for (int i = 0; i < str_s.length; i++) {
for (int j = i; j < str_t.length; j++) {
if (str_s[i] == str_t[j]) {
temp = str_t[i];
str_t[i] = str_t[j];
str_t[j] = temp;
check = true;
break;
}
}
if (!check) return check;
check = false;
}
return true;
}
二、通過Arrrays的sort方法,对两个String进行排序,再进行对比
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())return false;
char[] str_s = s.toCharArray();
char[] str_t = t.toCharArray();
Arrays.sort(str_s);
Arrays.sort(str_t);
String m =new String(str_s);
String n =new String(str_t);
if(m.equals(n)){
return true;
}else return false;
}
三、这是我觉得最巧妙的方法。
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length())return false;
int[] alphabet = new int[26];
for (int i = 0; i < s.length(); i++)
alphabet[s.charAt(i) - 'a']++;
for (int i = 0; i < t.length(); i++)
alphabet[t.charAt(i) - 'a']--;
for (int i : alphabet)
if (i != 0) return false;
return true;
}
这三种中第二种的速度是最快的,虽然第三种最符合题意,最巧妙,但是他比第二种多做了一次循环,当处理字符串长度越长时,二者的差距就越明显。