题目描述:
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
首先看注意事项--假定字符串只包含小写字母,那么就好办了,因为字母一共才26个。
好了,看思路:
1)因为小写字母只有26个,所以我们可以申请一个数组来存放每个字母出现的次数,
2)遍历原数组,将每个字母-'a'后存入字母数组a中,于是a的下标0到25就是对应的字母'a'到'z'了,自加后对应的值就是字母在字符串中出现的次数。
3)再一次遍历原数组,直接查看s[i]对应在字母数组中的值是否为1,如果是,直接返回i,如果不是,继续遍历,
4)到最后也没有找到出现一次的字母,返回-1.
代码如下:
int firstUniqChar(char* s) {
int len=strlen(s);
int a[26];
memset(a,0,sizeof(int)*(26));
for(int i=0;i<len;i++){
a[s[i]-'a']++;
}
for(int i=0;i<len;i++){
if(a[s[i]-'a']==1) return i;
}
return -1;
}