锁定老帖子 主题:有个很诡异的需求,向高手请教最优解
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2006-10-12
gamex 写道 行为艺术家 写道 gamex 写道 foxty 写道 遍历然后对每个字母计数不就OK了?
我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它) 楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术. 我的意思是在保证速度的情况下的最优解 我的原则是:效率第一,代码清晰其次. 你的估计是:效率完成任务,以代码清晰为胜. 其实我们想的差不多. |
|
返回顶楼 | |
发表时间:2006-10-12
行为艺术家 写道 gamex 写道 行为艺术家 写道 gamex 写道 foxty 写道 遍历然后对每个字母计数不就OK了?
我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它) 楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术. 我的意思是在保证速度的情况下的最优解 我的原则是:效率第一,代码清晰其次. 你的估计是:效率完成任务,以代码清晰为胜. 其实我们想的差不多. 是啊先实现,后重构。 |
|
返回顶楼 | |
发表时间:2006-10-12
没仔细看题,那个递归的把原来的list给破坏了。
给个iteration的。 public static String bar2(List<Object> lst) { LinkedHashMap<Object, Integer> map = new LinkedHashMap<Object, Integer>(); Iterator<Object> it = lst.iterator(); while(it.hasNext()) { Object o = it.next(); Integer i = map.get(o); if(i==null) map.put(o, 1); else map.put(o, i+1); } Iterator<Map.Entry<Object, Integer>> mapIt = map.entrySet().iterator(); StringBuilder result = new StringBuilder(); while(mapIt.hasNext()) { Map.Entry<Object, Integer> entry = mapIt.next(); if(entry.getValue()==1) result.append(entry.getKey().toString() + ";"); else result.append(entry.getKey().toString() + "*" + entry.getValue() + ";"); } return result.toString(); } |
|
返回顶楼 | |
发表时间:2006-10-12
题外话:
楼主,是诡异不是鬼异也不是聊斋志异,行文错一点可以理解,标题错了还是改改的好. |
|
返回顶楼 | |
发表时间:2006-10-13
行为艺术家 写道 题外话:
楼主,是诡异不是鬼异也不是聊斋志异,行文错一点可以理解,标题错了还是改改的好. 多谢提醒, 不好意思 |
|
返回顶楼 | |
发表时间:2006-10-13
试试这个
import java.util.ArrayList; import java.util.List; import org.apache.commons.lang.StringUtils; public class test { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub List list = new ArrayList(); list.add("a"); list.add("b"); list.add("b"); list.add("b"); list.add("c"); list.add("c"); list.add("d"); list.add("d"); list.add("e"); String s = list.toString().replaceAll(",|\\[|\\]","").trim(); s= StringUtils.deleteSpaces(s); String s1= ""; for (int i = 0; i <s.length(); i++) { String ch = String.valueOf((char)s.charAt(i)); if(s1.indexOf(ch)<0) { s1 = s1 + ch ; System.out.println(ch+"*"+StringUtils.countMatches(s,ch)); } } } } 结果 a*1 b*3 c*2 d*2 e*1 |
|
返回顶楼 | |
发表时间:2006-10-13
select element + "*" + count(element) from List group by element
感觉有时候sql蛮好的 haha |
|
返回顶楼 | |
发表时间:2006-10-13
welllove53 写道 select element + "*" + count(element) from List group by element
感觉有时候sql蛮好的 haha 有创意 |
|
返回顶楼 | |
发表时间:2006-10-13
搂住想要的应该是这个吧
public class Test { private Map map = new HashMap(); private List list = new ArrayList(); public static void main(String[] args) { Test t = new Test(); t.init(); t.list2Map(); t.printMap(); } public void init(){ list.add("a"); list.add("a"); list.add("a"); list.add("a"); list.add("a"); list.add("b"); list.add("a"); list.add("a"); list.add("a"); list.add("b"); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("d"); } public void list2Map(){ for(int i = 0; i<list.size() ; i++){ Object obj = list.get(i); if(map.containsKey(obj)){ int count = ((Integer)map.get(obj)).intValue(); count++ ; map.put(obj,new Integer(count)); }else{ map.put(obj,new Integer(1)); } } } public void printMap(){ for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { Map.Entry entry = (Map.Entry) iter.next(); Object key = entry.getKey(); Object val = entry.getValue(); int count = ((Integer)val).intValue(); if( count> 1 ){ print(key.toString()+"*"+count); }else{ print(key.toString()); } } } private void print(Object obj){ System.out.println(obj.toString()); } } 输出结果为 d*2 a*9 b*3 c |
|
返回顶楼 | |
发表时间:2006-10-13
zzsczz 写道 procedure thefun(arg:string):string;
result:= 'a;b*3;c*2;d'; end; delphi都出来了 |
|
返回顶楼 | |