📌  相关文章
📜  Java程序检查两个字符串是否互为 Anagram(1)

📅  最后修改于: 2023-12-03 15:16:38.011000             🧑  作者: Mango

Java程序检查两个字符串是否互为 Anagram

Anagram是指由颠倒字母顺序组成的单词。例如,“silent”可以由“listen”颠倒字母顺序组成。在这里,我们将介绍如何在Java中检查两个字符串是否互为Anagram。

解决方法

实现这个功能的简单方法是,将两个字符串中的字符分别存储在两个HashMap中,并检查它们是否相同。

public static boolean isAnagram(String str1, String str2) {
    if (str1.length() != str2.length()) {
        return false;
    }
    Map<Character, Integer> frequencyMap1 = new HashMap<>();
    Map<Character, Integer> frequencyMap2 = new HashMap<>();
    for (int i = 0; i < str1.length(); i++) {
        frequencyMap1.put(str1.charAt(i), frequencyMap1.getOrDefault(str1.charAt(i), 0) + 1);
        frequencyMap2.put(str2.charAt(i), frequencyMap2.getOrDefault(str2.charAt(i), 0) + 1);
    }
    return frequencyMap1.equals(frequencyMap2);
}

此方法使用两个Map(HashMap)将字符串转换为字符和其出现次数的映射。然后,我们检查两个映射是否相同。如果两个字符串的长度不同,则它们不可能是Anagram,并且方法将返回false,否则它将在O(n)时间内遍历字符串并构建频率映射。最后,它在O(1)时间内比较频率映射并返回结果。

测试

接下来是我们如何测试这个方法。我们将创建一个JUnit测试类,并编写以下测试用例:

@Test
public void testIsAnagram() {
    assertTrue(AnagramChecker.isAnagram("silent", "listen"));
    assertTrue(AnagramChecker.isAnagram("night", "thing"));
    assertTrue(AnagramChecker.isAnagram("Astronomer", "Moon starer"));
    assertFalse(AnagramChecker.isAnagram("hello", "world"));
    assertFalse(AnagramChecker.isAnagram("Java", "JavaScript"));
}

这里我们使用Java中的JUnit测试框架编写测试用例。我们期望前三个测试用例返回true,后两个测试用例返回false。

结论

这是一个简单而有效的方法,可以在Java中检查两个字符串是否互为Anagram。通过将字符和其出现次数映射到HashMap中,我们可以在O(n)时间内构建频率映射,并在O(1)时间内比较它们。这个方法的时间复杂度是O(n),空间复杂度是O(n)。