从一个字符串中找出第一个不重复字符
从一个字符串中找出第一个不重复字符:
输入,“saskdfw234sad2t356sadfg”; 输出k;
输入,“sasdf23sad2t3sadf”; 输出t;
输入,“saskdfwfgwk23sad23sadfg”; 输出NULL;
面试的时候碰到的,当时没做做出来,只想到用hashtable,但是实在是能力不够,短时间做不出来,回来后上网查了资料,发现确实有hashtable的解法,也有提出倒序遍历思想的,试了一下,下面是我的程序,如果有错误,还请朋友指出来,谢谢~
#include <stdio.h>#include <string.h>int main(void){int a[1024]; /* 这个地方我取256或512的时候都不能得到正确的答案,why?*/char *s="saskdfwfgwk23sad23sadfg";int i,len;char c=' ',prev;len = strlen(s);for(i=len-1; i>=0; i--){(a[s[i]])++;if(a[s[i]]==1){prev = c;c = s[i];}printf("prev=%c,c=%c, a[s[i]]=%d, s[i]=%c\n",prev,c,a[s[i]],s[i]);}if(a[c]==1){printf("c: %c\n", c);}else if(a[prev]==1){printf("c: %c\n", prev);}else{printf("c: %s\n", "NULL");}return 0;}#include<stdio.h>#include<string.h>int num[26]={0};int in[26]={0};int main(){ char *s="aaedaa"; int i; for(i=0;i<strlen(s);i++) { num[s[i]-'a']++; in[s[i]-'a']=i; } int min=strlen(s); for(i=0;i<26;i++) if(num[i]==1 && in[i]<min) { min=i; } printf("%c\n",min+'a'); return 0; }