https://leetcode-cn.com/problems/first-unique-character-in-a-string/submissions/
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
思路:哈希? 利用数组下标记录字母出现次数,另外创建一个临时数组记录各个字符首次出现的位置
int firstUniqChar(char* s) {
if(NULL == s){
return -1;
}
int i = 0;
int letter[26] = {0}; // 记录字符出现次数
int order[26] = {-1}; // 记录该字符最先出现的位置
for(i = 0; i < 26; i++){
letter[i] = 0;
order[i] = -1;
}
int slen = strlen(s);
for(i = 0; i < slen; i++){
letter[*s - 'a']++; // 记录字母出现次数
if(-1 == order[*s - 'a']){
order[*s - 'a'] = i; // 记录字母首次出现位置
}
s++;
}
int fsta = slen;
for(i = 0; i < 26; i++){
if(1 == letter[i]){ // 只出现一次的字母
if(fsta > order[i]){
fsta = order[i]; // 找到最先只出现一次的位置
}
}
}
if(fsta == slen){
return -1;
}
return fsta;
}