我有一個單詞列表如下。如何解決排序的anagrams
pear amleth dormitory tinsel dirty room hamlet listen silnet
我想找出所有字謎並按照順序列出。如果沒有發現任何東西,只需輸出該字。所以在上述情況下,輸出應該是。
amleth,hamlet dirty room,dormitory listen,silnet,tinsel pear
下面是我爲的書面Java代碼。
public class Anagram {
private boolean isAnagram(String s1, String s2) {
if (s1.length() != s2.length()) {
return false;
}
Map<Character, Integer> anagramMap = new HashMap<>();
for (char ch = 'a'; ch <= 'z'; ++ch)
anagramMap.put(ch, 0);
for(int i=0; i<s1.length(); i++){
anagramMap.put(s1.charAt(i), anagramMap.get(s1.charAt(i))+1);
}
for(int j=0; j<s2.length(); j++) {
if (anagramMap.get(s2.charAt(j)) != 0) {
anagramMap.put(s2.charAt(j), anagramMap.get(s2.charAt(j)) - 1);
}
}
for(int value : anagramMap.values()) {
if (value != 0) {
return false;
}
}
return true;
}
private void solveChallenge(List<String> words) {
for(int i=0 ;i<(words.size()-1); i++) {
Set<String> result = new TreeSet<>();
for(int j=(i+1); j< words.size(); j++) {
if (isAnagram(words.get(i), words.get(j))){
result.add(words.get(i) + " " + words.get(j));
System.out.println(result);
words.remove(j);
}
}
}
}
public static void main(String[] args) {
Anagram anagram = new Anagram();
List<String> words = new ArrayList<>();
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line = reader.readLine();
Integer numTestCases = Integer.parseInt(line);
while (--numTestCases >= 0){
words.add(reader.readLine().replaceAll("\\s+","").toLowerCase());
}
System.out.println(words);
new Anagram().solveChallenge(words);
} catch (IOException e) {
e.printStackTrace();
}
}
}
但它沒有列出所需的輸出。我得到的輸出是 [amleth hamlet] [dormitory dirtyroom] [tinsel lisetn]
有人可以告訴我這裏有什麼問題嗎?
「但它不是上市精確的輸出。」< - 你的意思是說做?輸出如何不是確切的輸出(本身)? –
_但它沒有列出所需的輸出._你能顯示你得到的輸出嗎? –
我看不出你如何期望你的程序產生你描述的輸出。它將兩個結果進行比較並輸出結果,但是您希望容納多於兩個字母的組。此外,您可以從輸入文字中去除空格;那些丟失 - 當你輸出結果時你不能複製它們。此外,您根本沒有任何機制來輸出不是任何其他輸入的字符的輸入。 **你需要一個完全不同的方法**。 –