首页 > 代码库 > 字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少?
字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少?
/**
* 只允许遍历一遍字符串
*/
public class 找出字符串中第一个只出现一次的字符 {
public static void main(String[] args) {
// 测试字符串
String str = "asdsacjj";
// 字符串转化成字符
char[] strToChar = str.toCharArray();
int len = strToChar.length;//字符串长度
//hashset用于判断是否出现过
HashSet<Character> hashset = new HashSet<Character>();
//hashIndex记录只出现一次的字符的第一个位置
HashMap<Character, Integer> hashIndex = new HashMap<Character, Integer>();
/**
* 先判断是否曾经出现
* 没有就记录在hashIndex
* 有则删除hashIndex已经保存的信息
*/
for (int i = 0; i < len ; i++) {
if(!hashset.contains(strToChar[i])){
hashset.add(strToChar[i]);
hashIndex.put(strToChar[i], i);
}else{
if(hashIndex.containsKey(strToChar[i])){
hashIndex.remove(strToChar[i]);
}
}
}
/**
* 转化成ist,用Collections.sort的Comparator去比较
* 容器的内部排序要注意
*/
List<Map.Entry<Character, Integer>> dataList= new ArrayList<Map.Entry<Character,Integer>>(hashIndex.entrySet());
Collections.sort(dataList,new Comparator<Map.Entry<Character,Integer>>() {
@Override
public int compare(Map.Entry<Character, Integer> o1,
Entry<Character, Integer> o2) {
if(o1.getValue().compareTo(o2.getValue())>0){
return 1;
}
// TODO Auto-generated method stub
return -1;
}
});
System.out.println(dataList.get(0));
}
}
本文出自 “DamenMai学习之路” 博客,转载请与作者联系!
字符串中第一个只出现一次的字符,如何优化算法使得遍历次数更少?