题目描述:给定一个字符串s,找到它的第一个不重复字符,并返回索引,如果不存在,则返回-1.
提示:s
不为空且 s
只包含小写字母
思路:
- 将字符串中的每个字符遍历一次,将其中每个字符以及其出现的次数保存起来
- 再次遍历字符串,匹配我们存储元素和次数的集合,找到这个第一个出现的字符即可,返回其索引下标
将字母转为整数,整形数组的下标对应了字符,数组中存储的元素即为出现的次数。
char c=s.charAt(i);//取出索引为i的字符
假设c==‘b’;//此时b这个字符至少出现了一次
data[c-'a']++;//就将b这个字符存储在了整型数组1的位置
data[c-‘a’]++;
此处的转换就是每个不同的小写字母相较于小写字母a的偏移量。
(每个不同的小写字母一定对应不同的整数)
‘a’-‘a’=0;
‘b’-‘a’=1;
‘c’-‘a’=2;
代码:
public static int FirstUniqChar(String s){//s只包含小写字母,因此开辟长度为26的整型数组int[] data=new int[26];//1.遍历s字符串,将每个字母出现的次数保存在count中for(int i=0;i<s.length();i++){char c=s.charAt(i);data[c-'a']++;}//count保存了每个不同字母以及其出现的次数//从前向后遍历第一次出现一次的字符for(int i=0;i< data.length;i++){char c=s.charAt(i);if(data[c-'a']==1)return i;}return -1;}
方式二:
将字符串进行处理之后,进行反转,判断反转前后的字符串是否一致