给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
解法:
通常定义一个长度为26的数组,数组的每一位代表一个字母abcd.....z
其中数组中的值标记字符串中 每一个 字符对应出现的次数。
先遍历字符串s ,用字符串中的每一个字符减去‘a’,这样得到一个差值,以这个差值作为下标更新数组,在字符串后面的字符如果有跟前面相同的字符,同样的数组中的位置不变,让其加一,这样我们便知道字符串中每个字符的个数,然后再次遍历字符串,
以字符出现的顺序遍历
如果发现第一个个数为1的字符,就是我们要找的位置。
class Solution {
public:
int firstUniqChar(string s) {
int a[26] = {0};
for(int i=0; i<s.size(); i++)
{
a[s[i]-'a']++;
}
for(int j=0; j<s.size(); j++)
{
if(a[s[j]-'a'] == 1)//为了找到第一个唯一字符,这一行代码意思是,还是按照字符在字符串中出现的顺序来判断
return j;
}
return -1;
}
};