有效的字母异位词
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的一个字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
说明:
你可以假设字符串只包含小写字母。
进阶:
如果输入字符串包含 unicode 字符怎么办?你能否调整你的解法来应对这种情况?
方法一:
这个会超时,扎心!
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
for(char str: s.toCharArray();) {
System.out.println(str);
int a = (int) s.chars().filter(c -> c == str).count();
int b = (int) t.chars().filter(c -> c == str).count();
if(a != b)
return false;
}
return true;
}
方法二:
这个使用先用排序将字符排好,然后在进行字符串比较。
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
char[] s_strs = s.toCharArray();
char[] t_strs = t.toCharArray();
Arrays.sort(s_strs);
Arrays.sort(t_strs);
String code_s = new String(s_strs);
String code_t = new String(t_strs);
if(code_s.compareTo(code_t) == 0) {
return true;
}
return false;
}
方法三:
统计每个字符的个数,然后在比较。和方法一的思路一样。
public boolean isAnagram(String s, String t) {
if(s.length() != t.length())
return false;
int[] s_int = new int[26];
int[] t_int = new int[26];
for(char str:s.toCharArray()) {s_int[str-'a']++;}
for(char str:t.toCharArray()) {t_int[str-'a']++;}
for(int i = 0; i < 26; i++) {
if(s_int[i] != t_int[i])
return false;
}
return true;
}