Group Anagrams 异位构词

Given an array of strings, group anagrams together.

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.

有关异构字符串的题目,这道题让我们从一个字符串数组中将异构字符串分组,并且每组中是按照字母顺序排列的。
我们可以借助哈希表来完成。创建一个哈希表,让它的key为String,value为一个链表。每次从数组中取一个元素后,我们可以先将它转化为字符数组,然后排序后转换为一个字符串,这样一来所有的异构字符串都会变为相同一个在一个字符串,哈希表中的key就存放这个转换后的串。这样就可以把异构字符串分组了。代码如下:

public class Solution {
public List<List<String>> groupAnagrams(String[] strs) {
HashMap<String, List<String>> hm = new HashMap<String, List<String>>();
List<List<String>> llist = new ArrayList<List<String>>();
if(strs == null || strs.length == 0) return llist;
for(int i = 0; i < strs.length; i++) {
char[] tem = strs[i].toCharArray();
Arrays.sort(tem);
String s = new String(tem);
if(!hm.containsKey(s)) {
hm.put(s, new ArrayList<String>());
}
hm.get(s).add(strs[i]);
}
for(List list : hm.values()) {
Collections.sort(list);
llist.add(list);
}
return llist;
}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值