Group Anagrams
Group Anagrams
文字列配列strsはタイミングを与え,任意の順序で返すのは構わないので,同じ配列で返す.
アナックはレイアウトだけが異なる文字列です.
すべての文字列は小文字で構成されています.
各文字列を比較して見つける方法はO(n^2)であり,非常に非効率である.
海図を使えば上の方法より簡単だと思います.
[20.0.11.29]成功
-抽象クラスnewと呼ばれる
-Stringタイプではなくchar配列で文字のソートを行うことができます→.toCharArray()関数
-海図から取得したすべての値を含む配列を返す関数を提供します.addAll(___.values())
問題の説明
文字列配列strsはタイミングを与え,任意の順序で返すのは構わないので,同じ配列で返す.
アナックはレイアウトだけが異なる文字列です.
すべての文字列は小文字で構成されています.
1 <= strs.length <= 104
0 <= strs[i].length <= 100
Input :List<String> strs
Output :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())
Reference
この問題について(Group Anagrams), 我々は、より多くの情報をここで見つけました https://velog.io/@yerin6860/Group-Anagramsテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol