我有一个程序可以告诉你两个词是否是彼此的变位词。有一些示例无法正常工作,我将不胜感激任何帮助,尽管如果它不是高级的那会很棒,因为我是第一年的程序员。 “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 许可协议
最快的算法是将 26 个英文字符中的每一个映射到一个唯一的素数。然后计算字符串的乘积。根据算术基本定理,当且仅当它们的乘积相同时,2 个字符串才是变位词。