Leetcode 49: Group Anagrams
2015-12-17 07:05
369 查看
Given an array of strings, group anagrams together.
For example, given:
Return:
Note:
For the return value, each inner list's elements must follow the lexicographic order.
All inputs will be in lower-case.
Solution:
First sort the string array to keep lexicographic order. Then for each string, convert it to a string with characters in lexicographic
order. If the converted string is the same, the two strings are anagram. Use a hash map to add each original string to anagram group and finally return the values of the map.
Time complexity: if the array length is n, the average length of strings is m, time complexity is O(n*mlogm)
Space complexity: O(n)?
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Arrays.sort(strs);
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
for (int i = 0; i < strs.length; i++) {
String current = strs[i];
char[] chararray = current.toCharArray();
Arrays.sort(chararray);
String keystr = new String(chararray);
List<String> group = map.getOrDefault(keystr, new ArrayList<String>());
group.add(current);
map.put(keystr, group);
}
return new ArrayList<List<String>> (map.values());
}
}
For example, given:
["eat", "tea", "tan", "ate", "nat", "bat"],
Return:
[ ["ate", "eat","tea"], ["nat","tan"], ["bat"] ]
Note:
For the return value, each inner list's elements must follow the lexicographic order.
All inputs will be in lower-case.
Solution:
First sort the string array to keep lexicographic order. Then for each string, convert it to a string with characters in lexicographic
order. If the converted string is the same, the two strings are anagram. Use a hash map to add each original string to anagram group and finally return the values of the map.
Time complexity: if the array length is n, the average length of strings is m, time complexity is O(n*mlogm)
Space complexity: O(n)?
public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
Arrays.sort(strs);
HashMap<String, List<String>> map = new HashMap<String, List<String>>();
for (int i = 0; i < strs.length; i++) {
String current = strs[i];
char[] chararray = current.toCharArray();
Arrays.sort(chararray);
String keystr = new String(chararray);
List<String> group = map.getOrDefault(keystr, new ArrayList<String>());
group.add(current);
map.put(keystr, group);
}
return new ArrayList<List<String>> (map.values());
}
}
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- android string.xml文件中的整型和string型代替
- Android java 与 javascript互访(相互调用)的方法例子
- android上改变listView的选中颜色
- String.intern
- Prototype源码浅析 String部分(二)
- Ruby中的String对象学习笔记
- PostgreSQL ERROR: invalid escape string 解决办法
- 浅谈C++中的string 类型占几个字节
- 标准C++类string的Copy-On-Write技术
- C++实现string存取二进制数据的方法
- C#中string和StingBuilder内存中的区别实例分析
- PHP STRING 陷阱原理说明
- c#中 String和string的区别介绍
- C#实现的图片、string相互转换类分享
- asp.net String.IsNullOrEmpty 方法
- JavaScript中字符串(string)转json的2种方法
- C#中string用法实例详解
- C#中的DataSet、string、DataTable、对象转换成Json的实现代码
- JavaScript中的object转换成number或string规则介绍