Group Anagrams


Group Anagrams

問題の説明


  • 文字列配列strsはタイミングを与え,任意の順序で返すのは構わないので,同じ配列で返す.

  • アナックはレイアウトだけが異なる文字列です.

  • すべての文字列は小文字で構成されています.
    1 <= strs.length <= 104
     0 <= strs[i].length <= 100
    Input :List<String> strsOutput :List<List<String>>
  • トラブルシューティング方法


  • 各文字列を比較して見つける方法はO(n^2)であり,非常に非効率である.

  • 海図を使えば上の方法より簡単だと思います.
    아나그램의 특징인 '같은 문자들의 재배치'를 이용
    각 문자열들을 정렬하면 같은 문자열들이 생길 것이고 그것들을 묶어 반환
    key : 정렬된 문자열(String), value : 기존 문자열들(List<String>)
    まず全体的にstrsを一周します.
    정렬된 문자를 저장할 새로운 List변수를 생성 및 초기화한 뒤 해시맵에 put
    만약 존재하는 키라면 존재하는 List에 add
    次に、取得した要素をハッシュマッピングからキー値を取得し、戻るときに答えに追加します.
  • コード#コード#


    [20.0.11.29]成功
    class Solution {
        public List<List<String>> groupAnagrams(String[] strs) {
            List<List<String>> answer = new ArrayList<List<String>>();
            
            HashMap<String, List<String>> hash = new HashMap<String, List<String>>();
            
            for(String i : strs) {
                char[] tmp = i.toCharArray();
                Arrays.sort(tmp);
                String key = String.valueOf(tmp);
                
                if(hash.containsKey(key)) hash.get(key).add(i);
                else {
                    List<String> t = new ArrayList<String>();
                    t.add(i);
                    hash.put(key, t);
                }
            }
            answer.addAll(hash.values());
            return answer;
        }
    }

    -抽象クラスnewと呼ばれるList<List<String>>を生成中にエラーが発生しました.(error: List is abstract; cannot be instantiated)
    -Stringタイプではなくchar配列で文字のソートを行うことができます→.toCharArray()関数
    -海図から取得したすべての値を含む配列を返す関数を提供します.addAll(___.values())