剑指offer打卡17-第一个只出现一次的字符(java版)
1. 考察知识点
2. 题目
- 在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
3. 思路
- 利用 hashMap 存放每个元素出现的次数
- 判断这个元素是否第一次出现,如果第一次出现则将这个元素和出现次数(1次)添加到 map 中,如果不是第一次出现就在原有的次数上+1
- 遍历 str ,知道遇到出现次数为1的元素 返回元素的索引。
4. 代码实现
import java.util.HashMap;
public class Solution {
public int FirstNotRepeatingChar(String str) {
int length = str.length();
if(str == null || length == 0)
return -1;
HashMap<Character,Integer> map = new HashMap<>();
for(int i = 0; i < length; i++){
if (map.containsKey(str.charAt(i))){
int value = map.get(str.charAt(i));
map.remove(str.charAt(i));
map.put(str.charAt(i), value+1);
}else {
map.put(str.charAt(i), 1);
}
}
for(int i = 0; i < length; i++){
if(map.get(str.charAt(i)) == 1){
return i;
}
}
return -1;
}
}