1.题目描述
在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).(从0开始计数)
题目分析:
- 判断第一个出现一次的字符,需要对整个字符串进行遍历,将字符串转换为字符的形式,使用的charAt(int index),表示查询的是字符串中字符的位置。
- 遍历过程中判断当前字符是否在集合中已经存在,存在的话记录出现的次数,将当前的键值对存入集合。否则的话,把Value设置为1
- 从开始遍历字符串,判断集合中元素出现的次数是否等于1,等于1的话返回位置
2.代码实现
import java.util.*;
public class Solution {
public int FirstNotRepeatingChar(String str) {
if(str == null || str.length() == 0){
return -1;
}
// 使用集合HaspMap存储的键是字符,值是在整个字符串中该字符出现的次数
HashMap<Character,Integer> map = new HashMap<Character,Integer>();
// 对字符串进行遍历
for(int i = 0;i < str.length();i++){
// 如果键中包含
if(map.containsKey(str.charAt(i))){
int count = map.get(str.charAt(i));
map.put(str.charAt(i),++count);
}else{
map.put(str.charAt(i),1);
}
}
// 找到第一个不重复的字符串的位置
for(int i = 0;i < str.length();i++){
if(map.get(str.charAt(i)) == 1){
return i;
}
}
return -1;
}
}
3.总结
- 这个题对对字符串的遍历,对字符串中的元素进行判断使用的集合HashMap键值对的形式
- 使用键作为字符串中的字符,值作为字符在字符串中出现的次数
- 使用HashMap<Key,Value>的算法,剑指Offer中目前出现了好几次了,给予重视
- 坚持下去,相信一定会睡到渠成!