锁定老帖子 主题:有个很诡异的需求,向高手请教最优解
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-12
可能没说清楚
list里面如果是对象。 |
|
返回顶楼 | |
发表时间:2006-10-12
完全不知道你在说什么
|
|
返回顶楼 | |
发表时间:2006-10-12
ddandyy 写道 完全不知道你在说什么
内容已经修改了你可以在看一下,只是想说明list里面的内容是对象不是字符串,不过影响不大,要求最优解。 |
|
返回顶楼 | |
发表时间:2006-10-12
是对象 是什么对象
不定? ABC是一种的不同 还是不是一种 还有就是 相同的是顺序还是乱序 |
|
返回顶楼 | |
发表时间:2006-10-12
我做了一个o(n)的,大家看看怎么样. 这是打印函数 public static void printSum(ArrayList list){ Collections.sort(list); String curr=""; String last=""; WordCount wc=null; for(int i=0;i<list.size();i++){ curr=(String)list.get(i); if(i==0){ wc=new WordCount(curr,1); last=curr; continue; } if(curr.equals(last)){ wc.increaseCount(); } else{ wc.print(); wc.changeWord(curr); } last=curr; } wc.print();// 这个地方容易漏一个 } 这是WordCount类 public class WordCount{ private String word; private int count; public WordCount(String word,int count){ this.word=word; this.count=count; } public void increaseCount(){ count=count+1; } public void print(){ System.out.println(word+"*"+count); } public void changeWord(String newWord){ word=newWord; count=1; } public int getCount() { return count; } public void setCount(int count) { this.count = count; } public String getWord() { return word; } public void setWord(String word) { this.word = word; } } 这是调用部分: public static void main(String[] arg){ ArrayList list=new ArrayList(); list.add("a"); list.add("a"); list.add("b"); list.add("c"); list.add("c"); list.add("e"); list.add("天朝"); list.add("天朝"); list.add("天朝"); list.add("鸡屁国"); list.add("南棒棒"); list.add("北棒棒"); list.add("阿妹例假国"); list.add("公鸡国"); list.add("罗撒国"); list.add("阿妹例假国"); list.add("阿妹例假国"); list.add("天朝"); list.add("天朝"); list.add("天朝"); list.add("北棒棒"); printSum(list); } 输出结果如下: a*2 b*1 c*2 e*1 公鸡国*1 北棒棒*2 南棒棒*1 天朝*6 罗撒国*1 阿妹例假国*3 鸡屁国*1 |
|
返回顶楼 | |
发表时间:2006-10-12
gamex 写道 foxty 写道 遍历然后对每个字母计数不就OK了?
我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它) 楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术. |
|
返回顶楼 | |
发表时间:2006-10-12
不好意思,没看楼主题设,不改原值做个拷贝就可以.
大家讨论一下算法吧,扣细节意义不大,毕竟我们是来交流讨论而不是来做作业或者完成项目的,不用那么一丝不苟. |
|
返回顶楼 | |
发表时间:2006-10-12
给个递归的:
public static String bar(List<Object> lst, Map<Object, Integer> map) { if(lst.size()==0) { Iterator<Map.Entry<Object, Integer>> it = map.entrySet().iterator(); StringBuilder result = new StringBuilder(); while(it.hasNext()) { Map.Entry<Object, Integer> entry = it.next(); if(entry.getValue()==1) result.append(entry.getKey().toString() + ";"); else result.append(entry.getKey().toString() + "*" + entry.getValue() + ";"); } return result.toString(); } else { Object c = lst.remove(0); Integer i = map.get(c); if(i==null) map.put(c, 1); else map.put(c, i+1); return bar(lst, map); } } ....... public static void main(String[] args) { ArrayList<Object> arrLst = new ArrayList<Object>(); arrLst.add('a'); arrLst.add('b'); arrLst.add('b'); arrLst.add('b'); arrLst.add('c'); arrLst.add('c'); arrLst.add('d'); arrLst.add('d'); arrLst.add('e'); arrLst.add("recursion"); arrLst.add("recursion"); arrLst.add("recursion"); arrLst.add("fp"); arrLst.add("fp"); System.out.println(bar(arrLst, new LinkedHashMap<Object, Integer>())); } |
|
返回顶楼 | |
发表时间:2006-10-12
行为艺术家 写道 gamex 写道 foxty 写道 遍历然后对每个字母计数不就OK了?
我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它) 楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术. 我的意思是在保证速度的情况下的最优解 |
|
返回顶楼 | |
发表时间:2006-10-12
楼上的兄弟,排序完了就不用递归吧.
|
|
返回顶楼 | |