我想获得列表中最小的字符串匹配。尽管我成功地做到了,但问题是我想算一下已经进行了多少次比赛:
List<String> mylist=new LinkedList<String>();
Set<String> result=new LinkedHashSet<String>();
mylist.add("interpreter");
mylist.add("interprete");
mylist.add("interpret");
mylist.add("developed");
mylist.add("develops");
mylist.add("develop");
mylist.add("interpret");
String small="";
Collections.sort(mylist);
Collections.reverse(mylist);
for(int i=0;i<mylist.size();i++)
{
small=mylist.get(i);
for(int j=i;j<mylist.size();j++)
{
if(small.contains(mylist.get(j)))
{
small=mylist.get(j);
}
}
result.add(small);
}
for (String string : result) {
System.out.println(string);
}
因此输出应为:
interpret=4
develop=4
我尝试的以下代码出现问题:
List<String> mylist=new LinkedList<String>();
Set<String> result=new LinkedHashSet<String>();
mylist.add("interpreter");
mylist.add("interprete");
mylist.add("interpret");
mylist.add("developed");
mylist.add("develops");
mylist.add("develop");
mylist.add("interpret");
mylist.add("crawler");
mylist.add("crawl");
mylist.add("mobile");
mylist.add("mob");
mylist.add("juni");
mylist.add("junis");
Collections.sort(mylist);
Collections.reverse(mylist);
String small="";
int c=0;
for(int i=0;i<mylist.size();i++)
{
c+=1;
small=mylist.get(i);
for(int j=i;j<mylist.size();j++)
{
if(small.contains(mylist.get(j)))
{
small=mylist.get(j);
c+=1;
}
}
result.add(small);
}
for (String string : result) {
System.out.println(string+"="+c);
}
有人可以帮我吗!
最佳答案
将@jambriz的答案放入代码中:
1.使用HashMap
HashMap<String, Integer> result= new LinkedHashMap<String, Integer>();
2.仅当值是新值或计数小于以前的计数时,才将值添加到哈希图中,而不是现在的
result.add(small);
。另外,在此处设置c=0
if (!result.containsKey(small) || result.get(small) < c)
result.put(small, c);
c = 0;
3.在最后打印您的结果:
for (String key : result.keySet())
System.out.println(key + ": " + result.get(key));