问题描述
思路解析
- 对于这种个数有限的问题,我的第一想法是使用桶排序来解决
- 因为s中只有小写英文单词,所以我只需要一个26个单位的数组就好了
- 通过 charAt() 来提取单个字符,然后通过 -‘a’ 来将其映射到 0~25,不然数组长度就被超过了
- 之后再++,最后再遍历一遍,只要==1 ,则代表只出现一次
- 需要注意的是,不能直接在 数组 char[0]~char[25]之间遍历,因为这样模糊了前后关系,就没办法知道哪个是第一个出来的了
代码
class Solution {
public int firstUniqChar(String s) {
/**
想法是用字符串数组来存储
char[s.charAt()]++ 来代表
并且只有小写数组,所以可以遍历
char[a]~char[z],不对,这样遍历,会找不出,第一个不重复的,打乱了顺序
还是得循环字符串的来寻找
*/
int n=s.length();
int[] arr=new int[26];
for(int i=0;i<n;i++){
arr[s.charAt(i)-'a']++;
}
for(int i=0;i<n;i++){
if(arr[s.charAt(i)-'a']==1)
return i;
}
return -1;
}
}