转自:http://www.javaeye.com/topic/399476
求第一个无重复字符,如"total"的第一个无重复字符是o,"teeter"的第一个无重复字符是r,效率要优于O(n的平方)
public class Tongji {
public static void main(String arg[]){
String test = "tatleae";
char[] array = test.toCharArray();
for(char tmp : array){
if(test.indexOf(tmp)==test.lastIndexOf(tmp)){
System.out.println(tmp);
break;
}
}
} //这个代码段,但是效率没有达到O(n)
/*
public static void main(String arg[]){
String test = "tatle";
char[] array = test.toCharArray();
LinkedHashMap<String, Integer> map = new LinkedHashMap<String, Integer>();
for(char tmp : array){
String str = tmp+"";
if(map.get(str)==null){
map.put(str, 1);
}else{
map.put(str, 0);
}
}
for(Entry<String, Integer> tmp : map.entrySet()){
if(tmp.getValue()!=null&&tmp.getValue()==1){
System.out.println(tmp.getKey());
break;
}
}
}
*/
}
//下面这种方法也是转自的刚才的网址的 代码不长,但是效率好像比较高
public static void main(String arg[]){
String str="tatle";
if (null == str) return;
char[] base = new char[Character.MAX_VALUE];
char[] arr = str.toCharArray();
for (char item : arr) {
base[item]++; //可以直接统计base['t']出现的次数
System.out.print(" "+(int)base[item]);
}
int value = -1;
for (char item : arr) {
//System.out.print(" "+base[item]);
if (base[item] == 1) {
value = item;
break;
}
}
if (value == -1) {
System.out.println("没找到");
} else {
System.out.println((char)value);
}
}

被折叠的 条评论
为什么被折叠?



