題目
思路與算法
- 思路很簡單:進行簡單的遍歷,將每次得到的字符串進行排序,再存入map,如果map已經中已經出現了排序後的字符串,說明這倆是異位詞,存入第一次出現的<K,V>組的V數組中。否則,直接在當前K處存入當前V即可完成遍歷,詳細註釋見代碼。
代碼實現
package com.immunize.leetcode.groupAnagrams;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List> map = new HashMap<String, List>();
if (strs.length == 0) {
return new ArrayList();
}
for (String val : strs) {
char[] tmp = val.toCharArray();
Arrays.sort(tmp);
String key = String.valueOf(tmp);
if (!map.containsKey(key)) {
map.put(key, new ArrayList());
}
map.get(key).add(val);
}
List<List<String>> res = new ArrayList(map.values());
return res;
}
}
複雜度分析
- 由於使用了Arrays的sort,所以內部排序爲歸併排序,複雜度NlogN,外部M,因此總時間複雜度爲O(MNlogN)。
- 空間複雜度爲O(MN).