📌  相关文章
📜  在Java中使用HashMap检查两个字符串是否是彼此的Anagram(1)

📅  最后修改于: 2023-12-03 14:51:17.112000             🧑  作者: Mango

在Java中使用HashMap检查两个字符串是否是彼此的Anagram

在计算机科学中,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为字符串的长度。