原题目
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:您可以假定该字符串只包含小写字母。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string
题目大意
找到第一个在字符串中只出现一次的字符
题目分析
用哈希表法,将字母作为下标统计26个字母出现的次数,然后再次对字符串进行循环,用hash判断是否有只出现一次的字符,这样就可以直接找到第一个指出现一次的字符,从而不需要记录每个字符的地址,在找最下的地址。
具体代码
int firstUniqChar(char * s){
int hash[26];
memset(hash,0,sizeof(hash));
for(int i=0;s[i];i++)
{
hash[s[i]-'a']++;
}
for(int i=0;i<26;i++)
printf("%d ",hash[i]);
printf("\n");
for(int i=0;s[i];i++)
{
if(hash[s[i]-'a']==1)
return i;
}
return -1;
}
此代码时间复杂度和空间复杂度
执行用时 : 20 ms , 在所有 C 提交中击败了 71.48% 的用户
内存消耗 : 8.3 MB , 在所有 C 提交中击败了 80.40% 的用户
总结
简单题,了解哈希表算法