给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。
字母异位词 是由重新排列源单词的所有字母得到的一个新单词。
思路:
new Dictionary<string, List<string>>() 存储数据,key为排序之后的字符串
对每个字符串进行排序,若是相同,则放进字典的value中
str.ToCharArray() 将string转换成字符数组array,用Array.Sort(array),对字符串数组进行排序,最后判断字典中是否有该key,有则存入;没有,则新建一个key,存入
public class Solution {
public IList<IList<string>> GroupAnagrams(string[] strs) {
var dict = new Dictionary<string, List<string>>();
foreach(var str in strs)
{
var array = str.ToCharArray();
Array.Sort(array);
var sortedStr = new string(array);
if(dict.ContainsKey(sortedStr))
dict[sortedStr].Add(str);
else
dict.Add(sortedStr, new List<string>(){str});
}
return new List<IList<string>>(dict.Values);
}
}
复杂度分析
- 时间复杂度:O(nklogk),其中 n 是数组 strs 的长度,k 是数组 strs 中的字符串的最大长度。需要遍历 n 个字符串,每个字符串的排序和更新哈希表共需要 O(klogk) 的时间,总时间复杂度是 O(nklogk)。
-
空间复杂度:O(nk),其中 n 是数组 strs 的长度,k 是数组 strs 中的字符串的最大长度。哈希表需要存储数组 strs 中的全部字符串,需要 O(nk) 的空间。