Conversation
|
回答を見るとさらに計算量のいいやり方があり、アルゴリズムをしっかり考えるとでそうな感じもあるのでできるようにしておこうと思いました。かつa-zの数が有限26個であることを利用する問題も結構みたことあるので、この考えがすぐでるようにしようと思います。 |
49_GroupAnagrams.java
Outdated
| @@ -0,0 +1,24 @@ | |||
| class Solution { | |||
| // 計算量は毎回ソートが入るので、文字列の長さのmaxをl, 配列の長さをnとすると、l*logl * n と予測 | |||
There was a problem hiding this comment.
計算量を書く際は、オーダー表記を用いて、 O(l log l n) などと書くことをお勧めいたします。
49_GroupAnagrams.java
Outdated
| class Solution { | ||
| // 計算量は毎回ソートが入るので、文字列の長さのmaxをl, 配列の長さをnとすると、l*logl * n と予測 | ||
| public List<List<String>> groupAnagrams(String[] strs) { | ||
| List<List<String>> list = new ArrayList<>(); |
There was a problem hiding this comment.
変数名には、その変数の値がプログラム中でどのような役割を持っているのかを端的に表す英単語・英語句を付けることをお勧めします。これは、ソースコードを読んだ人が、最速で正確にコードの内容を理解できるようにするためです。ソースコードを読む人のペルソナが、ネイティブアメリカンイングリッシュスピーカーで、かつコンピューターサイエンスに関する学部出身であることを念頭に置き、そういった人たちに対して書くことを意識するとよいと思います。
ここではアナグラムによってグループ化されていることを表すため、 grouped または groupedByAnagrams などとするとよいと思います。
| // 計算量は毎回ソートが入るので、文字列の長さのmaxをl, 配列の長さをnとすると、l*logl * n と予測 | ||
| public List<List<String>> groupAnagrams(String[] strs) { | ||
| List<List<String>> list = new ArrayList<>(); | ||
| Map<String, Integer> map = new HashMap<>(); |
There was a problem hiding this comment.
こちらも上記と同様です。 sortedToGroupIndices 等が良いと思います。
| list.get(index).add(str); | ||
| } else { | ||
| map.put(sorted, list.size()); | ||
| List<String> newList = new ArrayList<>(); |
There was a problem hiding this comment.
新しく作られたグループであることを意図するため newGroup 等の名前を付けるとよいと思います。
| Arrays.sort(cs); | ||
| String sorted = new String(cs); | ||
| if (map.containsKey(sorted)) { | ||
| int index = map.get(sorted); |
There was a problem hiding this comment.
index だけでもグループのインデックスであることが伝わりますが、より叙述的にするため、 groupIndex としても良いと思います。
問題
https://leetcode.com/problems/group-anagrams/description/