论坛首页 入门技术论坛

有个很诡异的需求,向高手请教最优解

浏览 15785 次
该帖已经被评为新手帖
作者 正文
   发表时间:2006-10-12  
gamex 写道
行为艺术家 写道
gamex 写道
foxty 写道
遍历然后对每个字母计数不就OK了?

我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它)


楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术.

我的意思是在保证速度的情况下的最优解


我的原则是:效率第一,代码清晰其次.
你的估计是:效率完成任务,以代码清晰为胜.
其实我们想的差不多.
0 请登录后投票
   发表时间:2006-10-12  
行为艺术家 写道
gamex 写道
行为艺术家 写道
gamex 写道
foxty 写道
遍历然后对每个字母计数不就OK了?

我上面不是说过了,解它没什么问题,我求的是最优解(用最少的代码来解它)


楼主,不求速度最快求代码最少啊!这是什么需求? 我的ID可以形容--行为艺术.

我的意思是在保证速度的情况下的最优解


我的原则是:效率第一,代码清晰其次.
你的估计是:效率完成任务,以代码清晰为胜.
其实我们想的差不多.

是啊先实现,后重构。
0 请登录后投票
   发表时间: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();		
}
0 请登录后投票
   发表时间:2006-10-12  
题外话:
楼主,是诡异不是鬼异也不是聊斋志异,行文错一点可以理解,标题错了还是改改的好.

0 请登录后投票
   发表时间:2006-10-13  
行为艺术家 写道
题外话:
楼主,是诡异不是鬼异也不是聊斋志异,行文错一点可以理解,标题错了还是改改的好.


多谢提醒,  不好意思
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2006-10-13  
select element + "*" + count(element) from List group by element

感觉有时候sql蛮好的
haha
0 请登录后投票
   发表时间:2006-10-13  
welllove53 写道
select element + "*" + count(element) from List group by element

感觉有时候sql蛮好的
haha

有创意
0 请登录后投票
   发表时间: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
0 请登录后投票
   发表时间:2006-10-13  
zzsczz 写道
procedure thefun(arg:string):string;
result:= 'a;b*3;c*2;d';
end;

delphi都出来了
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics