3

最終的に私がしなければならないことは次のとおりです。

次のようなArrayList呼び出された originalList があります [pans, pots, sit, it's, naps]

ArrayListそして、originalList を受け取り、句読点と大文字を削除してリストをソートする modifiedList という名前の別のメソッド。だからそれは次のようになります [anps, anps, ist, ist, opst]

modifiedList の目的は、相互のアナグラムである単語を教えてくれることです。アナグラムは、同じ文字で構成される単語です。問題は、どの単語が互いにアナグラムであるかを出力できるように、originalList を modifiedList に一致するように並べ替える必要があることです。originalList になる必要があり[pans, naps, sit, it's, pots]ます。提案?

4

2 に答える 2

5

追加のリストを使用しないでください。比較する2つの単語を「正規化」するコンパレータを使用して元のリストをソートし、正規化された値を比較します(正規化とは、に変換napsすることを意味しanpsます)。

次に、リスト内でアナグラムを並べて表示します。

于 2013-03-09T23:09:23.677 に答える
1
public static void main(String args[]){
        ArrayList<String> alOriginal = new ArrayList<String>();
        alOriginal.add("pans");
        alOriginal.add("pots");
        alOriginal.add("sit");
        alOriginal.add("it's");
        alOriginal.add("naps");
        ArrayList<String> alAnagram = getSortedAnagramStrings(alOriginal);
        System.out.println(alOriginal);
        System.out.println(alAnagram);
    }
    public static java.util.ArrayList<String> getSortedAnagramStrings(ArrayList<String> original){
        ArrayList<String> alAnagramStrings = new ArrayList<String>();
        for (String currentString : original) {
            //  Remove punctuation
            char[] anagramChars = currentString.replace("'", "").toCharArray();
            //  Sort characters
            Arrays.sort(anagramChars);
            //  Prepare string
            String anagramString = new String(anagramChars);
            //  Add to array list
            alAnagramStrings.add(anagramString);
        }
        //  Simple sort logic
        for (int index = 0; index < alAnagramStrings.size(); index ++){
            for (int index1 = index + 1; index1 < alAnagramStrings.size(); index1 ++){
                //  If both anagram strings are same
                if(alAnagramStrings.get(index).compareTo(alAnagramStrings.get(index1)) == 0){
                    //  Compare original strings
                    if (original.get(index).compareTo(original.get(index1)) > 0){
                        String temp =original.get(index);
                        original.set(index, original.get(index1));
                        original.set(index1, temp);
                    }else{
                        String temp =original.get(index);
                        original.set(index1, original.get(index));
                        original.set(index, temp);
                    }
                }else if(alAnagramStrings.get(index).compareTo(alAnagramStrings.get(index1)) > 0){
                    String temp =alAnagramStrings.get(index);
                    alAnagramStrings.set(index, alAnagramStrings.get(index1));
                    alAnagramStrings.set(index1, temp);
                    String temp1 =original.get(index);
                    original.set(index, original.get(index1));
                    original.set(index1, temp1);
                }
            }
        }
        return alAnagramStrings;
    }
于 2013-03-09T23:30:36.067 に答える