给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
示例 1:输入: s = "anagram", t = "nagaram" 出: true
示例 2:输入: s = "rat", t = "car" 输出: false
法一:排序来解决;如果字母相同,只是位置不同,排出来是一样的顺序
public boolean isAnagram(String s, String t) {
char[] cs = s.toCharArray();
Arrays.sort(cs);
char[] ct = t.toCharArray();
Arrays.sort(ct);
return Arrays.equals(cs, ct);
}
法二:HashMap的getOrDefault()方法
public boolean isAnagram1(String s, String t) {
if (s.length() != t.length())
return false;
HashMap<Character, Integer> dicHashMap = new HashMap<>();
HashMap<Character, Integer> dicHashMap2 = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
Integer cnt = dicHashMap.getOrDefault(ch, 0);
cnt++;
dicHashMap.put(ch, cnt);
}
for (int i = 0; i < t.length(); i++) {
char ch2 = t.charAt(i);
Integer cnt2 = dicHashMap2.getOrDefault(ch2, 0);
cnt2++;
dicHashMap2.put(ch2, cnt2);
}
return dicHashMap.equals(dicHashMap2);
}
法三:HashMap的get()方法
public boolean isAnagram3(String s, String t) {
if (s.length() != t.length())
return false;
HashMap<Character, Integer> dicHashMap = new HashMap<>();
HashMap<Character, Integer> dicHashMap2 = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char ch = s.charAt(i);
Integer cnt = dicHashMap.get(ch);
dicHashMap.put(ch, cnt == null ? 1 : cnt + 1);
}
for (int i = 0; i < t.length(); i++) {
char ch1 = t.charAt(i);
Integer cnt1 = dicHashMap2.get(ch1);
dicHashMap2.put(ch1, cnt1 == null ? 1 : cnt1 + 1);
}
return dicHashMap.equals(dicHashMap2);
}
法四:用数组简单实现的一个HashMap
public boolean isAnagram(String s, String t) {
if (s.length() != t.length())
return false;
int[] chs1 = new int[26];
int[] chs2 = new int[26];
for (int i = 0; i < s.length(); i++) {
chs1[(s.charAt(i) - 'a')] += 1;
chs2[(t.charAt(i) - 'a')] += 1;
}
return Arrays.equals(chs1, chs2);
}
法五:上面是设立两个数组,下面的只设一个数组
public boolean isAnagram(String s, String t) {
if (s.length() != t.length()) {
return false;
}
int[] counter = new int[26];
for (int i = 0; i < s.length(); i++) {
counter[s.charAt(i) - 'a']++;
counter[t.charAt(i) - 'a']--;
}
for (int count : counter) {
if (count != 0) {
return false;
}
}
return true;
}
end.