如何检查两个单词是否是字谜

新手上路,请多包涵

我有一个程序可以告诉你两个词是否是彼此的变位词。有一些示例无法正常工作,我将不胜感激任何帮助,尽管如果它不是高级的那会很棒,因为我是第一年的程序员。 “schoolmaster”和“theclassroom”是彼此的变位词,但是当我将“theclassroom”更改为“theclafsroom”时,它仍然说它们是变位词,我做错了什么?

 import java.util.ArrayList;
public class AnagramCheck {
    public static void main(String args[]) {
        String phrase1 = "tbeclassroom";
        phrase1 = (phrase1.toLowerCase()).trim();
        char[] phrase1Arr = phrase1.toCharArray();

        String phrase2 = "schoolmaster";
        phrase2 = (phrase2.toLowerCase()).trim();
        ArrayList<Character> phrase2ArrList = convertStringToArraylist(phrase2);

        if (phrase1.length() != phrase2.length()) {
            System.out.print("There is no anagram present.");
        } else {
            boolean isFound = true;
            for (int i = 0; i < phrase1Arr.length; i++) {
                for (int j = 0; j < phrase2ArrList.size(); j++) {
                    if (phrase1Arr[i] == phrase2ArrList.get(j)) {
                        System.out.print("There is a common element.\n");
                        isFound =;
                        phrase2ArrList.remove(j);
                    }
                }
                if (isFound == false) {
                    System.out.print("There are no anagrams present.");
                    return;
                }
            }
            System.out.printf("%s is an anagram of %s", phrase1, phrase2);
        }
    }

    public static ArrayList<Character> convertStringToArraylist(String str) {
        ArrayList<Character> charList = new ArrayList<Character>();
        for (int i = 0; i < str.length(); i++) {
            charList.add(str.charAt(i));
        }
        return charList;
    }
}

原文由 Chilli 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 407
2 个回答

最快的算法是将 26 个英文字符中的每一个映射到一个唯一的素数。然后计算字符串的乘积。根据算术基本定理,当且仅当它们的乘积相同时,2 个字符串才是变位词。

原文由 SeriousBusiness 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果两个单词包含相同数量的字符和相同的字符,则它们是彼此的变位词。您应该只需要按字典顺序对字符进行排序,并确定一个字符串中的所有字符是否与另一个字符串中的所有字符相等 _且顺序相同_。

这是一个代码示例。查看 API 中的 Arrays 以了解此处发生的情况。

 public boolean isAnagram(String firstWord, String secondWord) {
     char[] word1 = firstWord.replaceAll("[\\s]", "").toCharArray();
     char[] word2 = secondWord.replaceAll("[\\s]", "").toCharArray();
     Arrays.sort(word1);
     Arrays.sort(word2);
     return Arrays.equals(word1, word2);
}

原文由 Makoto 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题