给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的 字母异位词。
示例 1:
输入: s = "anagram", t = "nagaram"
输出: true
示例 2:
输入: s = "rat", t = "car"
输出: false
解法一:排序后对比
java
public class Test_validAnagram {
public static void main(String[] args) {
String s = "anagram";
String t = "nagaram";
boolean ret = validAnagram(s, t);
System.out.println(ret);
}
public static boolean validAnagram(String s1, String s2) {
char[] chars1 = s1.toCharArray();
char[] chars2 = s2.toCharArray();
Arrays.sort(chars1);
Arrays.sort(chars2);
return Arrays.equals(chars1, chars2);
}
}
解法二:使用HashMap统计每次字符出现的次数
java
public class Test_validAnagram2 {
public static void main(String[] args) {
String s = "anagram";
String t = "nagaraam";
boolean ret = validAnagram(s, t);
System.out.println(ret);
}
public static boolean validAnagram(String s1, String s2) {
char[] chars1 = s1.toCharArray();
char[] chars2 = s2.toCharArray();
// 用 HashMap 来记录字符串 s1 中出现的字符的次数
HashMap<Character, Integer> record = new HashMap<>();
for (char ch : chars1) {
record.put(ch, record.getOrDefault(ch, 0) + 1);
}
// 遍历char2,同事比较元素
for (char ch2 : chars2) {
int count = record.getOrDefault(ch2, 0) - 1;
record.put(ch2, count);
if (count < 0) {
return false;
}
}
return true;
}
}
解法三:使用数组统计字符个数
java
public class Test_validAnagram3 {
public static void main(String[] args) {
String s = "anagram";
String t = "nagaram";
boolean ret = validAnagram(s, t);
System.out.println(ret);
}
public static boolean validAnagram(String s1, String s2) {
char[] chars1 = s1.toCharArray();
char[] chars2 = s2.toCharArray();
// 用 HashMap 来记录字符串 s1 中出现的字符的次数
int[] record = new int[26];
for (char ch : chars1) {
record[ch - 'a']++;
}
// 遍历char2,同事比较元素
for (char ch2 : chars2) {
record[ch2 - 'a']--;
if (record[ch2 - 'a'] < 0) {
return false;
}
}
return true;
}
}