乱序字符串 · Anagrams
-
描述
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
-
样例
输入:
["lint", "intl", "inlt", "code"]
输出:
["lint", "inlt", "intl"]
题解:
在查表之前,先对字符串排序,然后查找。
public class Solution {
/**
* @param strs: A list of strings
* @return: A list of strings
*/
public List<String> anagrams(String[] strs) {
List<String> result = new ArrayList<String>();
if (strs == null || strs.length == 0) {
return result;
}
Map<String, ArrayList<String>> map = new HashMap<String, ArrayList<String>>();
for (int i = 0; i < strs.length; i++) {
//String转为char[]
char[] arr = strs[i].toCharArray();
Arrays.sort(arr);
//char[]转为String
String s = String.valueOf(arr);
if (!map.containsKey(s)) {
ArrayList<String> list = new ArrayList<String>();
map.put(s, list);
}
map.get(s).add(strs[i]);
}
//遍历HashMap
for (Map.Entry<String, ArrayList<String>> entry : map.entrySet()) {
if (entry.getValue().size() >= 2) {
result.addAll(entry.getValue());
}
}
return result;
}
}