📅  最后修改于: 2023-12-03 14:51:17.112000             🧑  作者: Mango
在计算机科学中,Anagram是指由颠倒字母顺序而构成的单词。如果两个字符串可以通过重新排列其字母来得到彼此,那么它们就是相互的Anagram。
在Java中,我们可以使用HashMap来检查两个字符串是否是彼此的Anagram。HashMap是一个哈希表实现的数据结构,它用于存储键值对。我们可以使用HashMap来统计字符串中每个字符的出现次数,并将每个字符作为键,字符出现次数作为值存储在HashMap中。
下面是一个演示如何使用HashMap检查两个字符串是否是彼此的Anagram的代码片段:
import java.util.HashMap;
public class AnagramChecker {
public static boolean isAnagram(String str1, String str2) {
// 创建HashMap对象用于存储字符出现次数
HashMap<Character, Integer> map = new HashMap<>();
// 遍历第一个字符串,统计字符出现次数
for (char c : str1.toCharArray()) {
map.put(c, map.getOrDefault(c, 0) + 1);
}
// 遍历第二个字符串,减少字符出现次数
for (char c : str2.toCharArray()) {
if (!map.containsKey(c)) {
// 如果字符不在第一个字符串中,返回false
return false;
}
map.put(c, map.get(c) - 1);
}
// 检查所有字符出现次数是否为零
for (int count : map.values()) {
if (count != 0) {
// 如果有字符出现次数不为零,返回false
return false;
}
}
// 如果所有条件满足,返回true
return true;
}
public static void main(String[] args) {
String str1 = "listen";
String str2 = "silent";
if (isAnagram(str1, str2)) {
System.out.println("字符串 " + str1 + " 和 " + str2 + " 是彼此的Anagram。");
} else {
System.out.println("字符串 " + str1 + " 和 " + str2 + " 不是彼此的Anagram。");
}
}
}
在上面的代码中,我们首先创建了一个HashMap对象来存储字符出现次数。然后,我们遍历第一个字符串并统计每个字符的出现次数,将字符作为键,出现次数作为值存储在HashMap中。接下来,我们遍历第二个字符串并减少字符在HashMap中的出现次数。如果某个字符在第二个字符串中出现但在第一个字符串中没有出现,或者某个字符的出现次数不为零,那么这两个字符串不是彼此的Anagram。
最后,我们在主方法中使用示例字符串调用isAnagram方法,并根据返回值输出结果。
这段代码使用HashMap提供了一种高效的方法来检查两个字符串是否是彼此的Anagram。它的时间复杂度为O(n),其中n为字符串的长度。