这题实在是没懂它的意思。。。囧啊
额 结果只要看字符以及对应的个数相同就行了。。。直接排序嘛 还简单一些
import java.util.HashSet;
public class Solution {
public ArrayList<String> anagrams(String[] strs) {
ArrayList<String> results = new ArrayList<String>();
HashSet<String> anas = new HashSet<String>();
HashMap<String, Integer> first = new HashMap<String, Integer>();
HashSet<String> added = new HashSet<String>();
for (int i = 0; i != strs.length; ++i){
String temp = getSmallestAna(strs[i]);
if (anas.contains(temp)){
if (!added.contains(strs[first.get(temp)])){
results.add(strs[first.get(temp)]);
added.add(strs[first.get(temp)]);
}
results.add(strs[i]);
} else {
anas.add(temp);
first.put(temp, i);
}
}
return results;
}
public String getSmallestAna(String origin){
char[] chars = origin.toCharArray();
char head = 'z';
int length = origin.length();
HashSet<Integer> indexs = new HashSet<Integer>();
for (int i = 0; i != length; ++i)
if (chars[i] < head){
head = chars[i];
indexs.clear();
indexs.add(i);
} else if (chars[i] == head)
indexs.add(i);
String small = origin;
for (int index: indexs){
String temp = origin.substring(index, length) + origin.substring(0, index);
if (temp.compareTo(small) < 0)
small = temp;
}
return small;
}
}
额 结果只要看字符以及对应的个数相同就行了。。。直接排序嘛 还简单一些
import java.util.HashSet;
public class Solution {
public ArrayList<String> anagrams(String[] strs) {
ArrayList<String> results = new ArrayList<String>();
HashSet<String> anas = new HashSet<String>();
HashMap<String, Integer> first = new HashMap<String, Integer>();
HashSet<String> added = new HashSet<String>();
for (int i = 0; i != strs.length; ++i){
String temp = getSmallestAna(strs[i]);
if (anas.contains(temp)){
if (!added.contains(strs[first.get(temp)])){
results.add(strs[first.get(temp)]);
added.add(strs[first.get(temp)]);
}
results.add(strs[i]);
} else {
anas.add(temp);
first.put(temp, i);
}
}
return results;
}
public String getSmallestAna(String origin){
char[] chars = origin.toCharArray();
Arrays.sort(chars);
return new String(chars);
}
}