如何使用Java函数来判断两个字符串是否为Anagram(具有相同字母但顺序不同)?
发布时间:2023-12-11 11:36:37
判断两个字符串是否为Anagram,可以通过以下几种方法实现。
## 方法1:排序法
该方法的思路是,将两个字符串分别按照字母顺序进行排序,然后比较两个排序后的字符串是否相等。如果相等,则说明两个字符串是Anagram。
import java.util.Arrays;
public class AnagramChecker {
public static boolean isAnagram(String str1, String str2) {
// 如果字符串长度不相等,说明不可能是Anagram
if (str1.length() != str2.length()) {
return false;
}
// 将字符串转为字符数组并进行排序
char[] charArray1 = str1.toCharArray();
char[] charArray2 = str2.toCharArray();
Arrays.sort(charArray1);
Arrays.sort(charArray2);
// 比较排序后的字符数组是否相等
return Arrays.equals(charArray1, charArray2);
}
public static void main(String[] args) {
String str1 = "listen";
String str2 = "silent";
if (isAnagram(str1, str2)) {
System.out.println(str1 + " and " + str2 + " are anagrams.");
} else {
System.out.println(str1 + " and " + str2 + " are not anagrams.");
}
}
}
## 方法2:哈希表法
该方法的思路是,使用一个哈希表记录 个字符串中每个字母出现的次数,然后遍历第二个字符串,将每个字母在哈希表中的计数减一。如果最终计数都为零,则说明两个字符串是Anagram。
import java.util.HashMap;
import java.util.Map;
public class AnagramChecker {
public static boolean isAnagram(String str1, String str2) {
// 如果字符串长度不相等,说明不可能是Anagram
if (str1.length() != str2.length()) {
return false;
}
// 使用哈希表记录每个字母出现的次数
Map<Character, Integer> charCount = new HashMap<>();
for (char c : str1.toCharArray()) {
charCount.put(c, charCount.getOrDefault(c, 0) + 1);
}
// 遍历第二个字符串,将每个字母在哈希表中的计数减一
for (char c : str2.toCharArray()) {
if (!charCount.containsKey(c)) {
return false;
}
int count = charCount.get(c);
if (count == 0) {
return false;
}
charCount.put(c, count - 1);
}
return true;
}
public static void main(String[] args) {
String str1 = "listen";
String str2 = "silent";
if (isAnagram(str1, str2)) {
System.out.println(str1 + " and " + str2 + " are anagrams.");
} else {
System.out.println(str1 + " and " + str2 + " are not anagrams.");
}
}
}
## 方法3:字符计数数组法
该方法的思路是,使用一个长度为26的整型数组,分别统计两个字符串中每个字母出现的次数。然后比较两个整型数组是否相等,如果相等,则说明两个字符串是Anagram。
public class AnagramChecker {
public static boolean isAnagram(String str1, String str2) {
// 如果字符串长度不相等,说明不可能是Anagram
if (str1.length() != str2.length()) {
return false;
}
// 使用整型数组记录每个字母出现的次数
int[] charCount = new int[26];
// 统计 个字符串中每个字母出现的次数
for (char c : str1.toCharArray()) {
charCount[c - 'a']++;
}
// 遍历第二个字符串,将每个字母在数组中的计数减一
for (char c : str2.toCharArray()) {
if (charCount[c - 'a'] == 0) {
return false;
}
charCount[c - 'a']--;
}
return true;
}
public static void main(String[] args) {
String str1 = "listen";
String str2 = "silent";
if (isAnagram(str1, str2)) {
System.out.println(str1 + " and " + str2 + " are anagrams.");
} else {
System.out.println(str1 + " and " + str2 + " are not anagrams.");
}
}
}
以上是三种判断两个字符串是否为Anagram的方法,分别是排序法、哈希表法和字符计数数组法,根据实际情况选择适合的方法即可。
