171. 乱序字符串
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
样例
样例1:
输入:["lint", "intl", "inlt", "code"]
输出:["lint", "inlt", "intl"]
样例 2:
输入:["ab", "ba", "cd", "dc", "e"]
输出: ["ab", "ba", "cd", "dc"]
挑战
什么是Anagram?
-
如果在更改字符顺序后它们可以相同,则两个字符串是anagram。
注意事项
所有的字符串都只包含小写字母
public class Solution {
/**
* @param strs: A list of strings
* @return: A list of strings
*/
public List<String> anagrams(String[] strs) {
HashSet<String> has = new HashSet<>();
HashSet<String> two = new HashSet<>();
List<String> key = new ArrayList<>();
List<String> list = new ArrayList<>();
for (String s : strs) {
String str = toString(s);
key.add(str);
if (!has.add(str)) {
two.add(str);
}
}
for (int i = 0; i < strs.length; i++) {
if (two.contains(key.get(i))) {
list.add(strs[i]);
}
}
return list;
}
private String toString(String str) {
int[] chars = new int[26];
for (int i = 0; i < str.length(); i++) {
chars[str.charAt(i) - 'a']++;
}
StringBuilder stringBuilder = new StringBuilder();
for (int aChar : chars) {
stringBuilder.append(aChar).append(",");
}
return stringBuilder.toString();
}
}