对不起,我现在累得太累了(太长时间不睡觉),项目截止日期是1小时......
我有一个列表,例如:{aaa,aaa,bbb,ccc,aaa,bbb,ccc,bbb}。 我需要以这种方式准备myList:
List<List<String>> myList = new ArrayList<List<String>>();
根据重复数量将自己呈现为单独的列表: {AAA,BBB} {CCC}
这是我丑陋的代码:
int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);
for (String key : unique) { //set max number of anagrams
if (maxAnagramsNumber < Collections.frequency(anagramLineList, key)){
maxAnagramsNumber = Collections.frequency(anagramLineList, key);
}
}
int countedAnagrams = 0;
for (int i=maxAnagramsNumber; i > 1; i--){ // group and make new list items acc.to number of duplicates
for (String anagramUnit : unique){
if(countedAnagrams != i && countedAnagrams != 0){
anagramLineListSorted.add(anagramUnit);
}
countedAnagrams = i;
}
myList.add(anagramLineListSorted);
答案 0 :(得分:0)
所有字谜都有相同的字符集。创建一个hashmap,将排序的chars列表作为键,将实际字符串列表作为值。然后最终将所有值组合到一个列表中。试着想一想如何做到这一点。如果你挣扎,我可以提供一些代码
将原始字符串数组传递给此函数
<强>代码强>
public List<String> anagrams(String[] strs) {
ArrayList<String> result = new ArrayList<String>();
if(strs == null || strs.length == 0)
return result;
HashMap<String, ArrayList<Integer>> map = new HashMap<String, ArrayList<Integer>>();
for(int i=0; i<strs.length; i++){
char[] arr = strs[i].toCharArray();
Arrays.sort(arr);
String t = String.valueOf(arr);
if(map.get(t) == null){
ArrayList<Integer> l = new ArrayList<Integer>();
l.add(i);
map.put(t, l);
}else{
map.get(t).add(i);
}
}
for(ArrayList<Integer> l: map.values()){
if(l.size() > 1){
for(Integer i: l){
result.add(strs[i]);
}
}
}
return result;
}
如果您只需要划分列表
ArrayList<String> result = new ArrayList<String>();
for(ArrayList<String> l : combined)
for(String g : l)
result.add(g);
现在结果会将所有字符串与字谜组合在一起。
答案 1 :(得分:0)
我没有编译它(可能存在一些语法问题)。但是逻辑应该像你期望的那样工作。
int maxAnagramsNumber = 0;
Set<String> unique = new HashSet<String>(anagramLineList);
Map<String, List<String>> ananas = new Map<String, List<Strin>>();
for (String ana:unique) {
char[] chars = theWord.toCharArray();
Arrays.sort(chars);
String key = new String(chars);
List<String> llist = ananas.get(key)
if (llist == null) {
llist = new List<String>()
ananas.put(key, llist)
}
llist.add(ana)
}
println(ananas);