日期:2014-05-20  浏览次数:20765 次

一个找重算法,求大家帮助(回复有分)
现有如下list集合泛型为String,集合中元素如下{abc,dfg,erf,aef,dcf,ert,yyu,oop},现要求找出其中第一个字符
相同的元素即为重复元素,找出这些元素{abc,aef,dfg,dcf,erf,ert},要求循环遍历一次得出结果!希望会的大侠,
给予帮助!

------解决方案--------------------
for example
Java code
List<String> list = {abc, def...};
List<String> newList = new ArrayList<String>();
Map<String, List<String>> map = new HashMap<String, List<String>>();
for (String s : list) {
    String key = s.substring(0, 1);
    if (!map.containsKey(key) {
        map.add(new ArrayList<String>());
    } 

    List<String> tmp = map.get(key);
    tmp.add(s);
    if (tmp.size()==2) { //如果刚好是2个,则2个都保存到新集合
        newList.addAll(tmp);
    } else if (map.get(key).size() > 2) { //如果大于2个,则保存本次循环的s
        newList.add(s);
    }
}

------解决方案--------------------
真搞不懂你这到底是要干吗,说算法吧,你这又是list又是泛型 的,还要求遍历一次,看样子是还不能用list的API?
------解决方案--------------------
遍历放入一个set集合中,然后判断集合中是否此元素即可,并将重复元素输出
Set<String> set=new HashSet<String>();
for(int i=0;i<list.size();i++){
if(!set.contains(list.get(i).substring(0,1))){
set.add(list.get(i).substring(0,1));
//System.out.println(list.get(i));
}else{
System.out.println(list.get(i));
}
}
------解决方案--------------------
感觉你还是自己想一下,然后说明你哪里不清楚,这样印象比较深刻