Problem
Given an array of strings, return all groups of strings that are anagrams.
Notice
All inputs will be in lower-case
Example
Given ["lint", "intl", "inlt", "code"], return ["lint", "inlt", "intl"].
Given ["ab", "ba", "cd", "dc", "e"], return ["ab", "ba", "cd", "dc"].
Note
对变形词的查找和归类,可以将自然排序的词根和所有同根变形词成对存入哈希表map里。然后,返回map.values()里size大于1的字符串数组,再存入结果数组res。注意res并不是ArrayList<ArrayList<String>>()的结构,而是和list数组相同的ArrayList<String>(),所以存list到res一定要用addAll()方法。
有几行容易出错的语句,可以注意一下:
char[] temp = str.toCharArray();
String sortedstr = new String(temp);
for (ArrayList<String> str: map.values()) {};
res.addAll(list);
Solution
public class Solution {
public List<String> anagrams(String[] strs) {
List<String> res = new ArrayList<String>();
HashMap<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
for (String str: strs) {
char[] temp = str.toCharArray();
Arrays.sort(temp);
String sortedstr = new String(temp);
if (map.containsKey(sortedstr)) {
ArrayList<String> list = map.get(sortedstr);
list.add(str);
map.put(sortedstr, list);
}
else {
ArrayList<String> list = new ArrayList<String>();
list.add(str);
map.put(sortedstr, list);
}
}
for (ArrayList<String> list: map.values()) {
if (list.size() > 1) res.addAll(list);
}
return res;
}
}
本文介绍了如何在给定的字符串数组中找到所有变形词,并通过哈希表进行高效匹配。详细步骤包括将字符串排序作为键,变形词作为值进行存储,最后筛选出包含两个以上变形词的集合。
471

被折叠的 条评论
为什么被折叠?



