您的位置:首页 > Web前端

《剑指offer》编程题java实现(八):第一个只出现一次的字符

2018-03-07 11:05 387 查看
问题描述:

在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置

感觉这道题没有说清楚,所谓的第一个出现的字符,指的是按照ASCII码的顺序,还是该字符串出现的顺序,本题的思路是基于字符串的顺序。

当然,重要的是思路,问题是什么并不重要!

思路描述

思路一:使用两个for循环,两层循环,时间复杂度为O(N^2)

思路二:借助hashmap,第一次遍历存储进入map中,key为字符,value为出现的次数,总体复杂度为O(N)

代码实现

//使用LinkedHashMap,保证存取顺序一致,可以得到第一个出现一次的字符
//根据牛客的测试判断,字符串第一个位置为0
public static int FirstNotRepeatingChar_solution(String str) {
//非空校验
if (str.length()==0) {
return -1;
}
char [] arr=str.toCharArray();
LinkedHashMap<Character, Integer> map=new LinkedHashMap<>();
for(char c: arr) {
if (map.containsKey(c)) {
int time=map.get(c);
map.put(c,++time );
}else {
map.put(c, 1);
}
}
//遍历map
int pos=-1;
for(char c:arr ) {
pos++;
if (map.get(c)==1) {
break;
}
}
return pos;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: