C语言通过模拟哈希表字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = "leetcode"
返回 0.
s = "loveleetcode",
返回 2.
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/first-unique-character-in-a-string
这道题最优的解法就是线性复杂度了,为了保证每个元素是唯一的,至少得把每个字符都遍历一遍。
算法的思路就是遍历一遍字符串,然后把字符串中每个字符出现的次数保存在一个散列表中。这个过程的时间复杂度为 O(N)O(N),其中 NN 为字符串的长度。
接下来需要再遍历一次字符串,这一次利用散列表来检查遍历的每个字符是不是唯一的。如果当前字符唯一,直接返回当前下标就可以了。第二次遍历的时间复杂度也是 O(N)O(N)。
#include <stdio.h> #include <stdlib.h> int firstUniqChar(char * s); int main() { int dex; char * str = (char *)malloc(sizeof(char)*1000); gets(str); dex =firstUniqChar(str); printf("%d",dex); } int firstUniqChar(char * s) { int i,j,len,dex; len =strlen(s); if(len==0) return -1; if(len==1) return 0; int nums[26]={0}; for(i=0;i<len;i++) { dex =s[i]-‘a‘; ++nums[dex]; } //遍历找出个数为1的第一个字符 for(i=0;i<len;i++) { dex=s[i]-‘a‘; if(nums[dex]==1) return i ; } return -1 ; }
相关推荐
kaixinfelix 2020-10-04
fsl 2020-04-29
chenfei0 2020-07-30
liqinglin0 2020-07-05
范范 2020-07-04
清溪算法君老号 2020-06-25
MLXY 2020-06-18
深思千年 2020-06-10
码墨 2020-05-29
alicelmx 2020-05-26
ipqtjmqj 2020-05-19
waitwolf 2020-05-12
rongxionga 2020-05-06
yangjingdong00 2020-05-04
kaixinfelix 2020-05-01
lickylin 2020-04-25
凌风郎少 2020-04-23
无能力者只知抱怨 2020-04-23