从一个字符串中找出第一个不重复字符:
输入,“saskdfw234sad2t356sadfg”; 输出k;
输入,“sasdf23sad2t3sadf”; 输出t;
输入,“saskdfwfgwk23sad23sadfg”; 输出NULL;
面试的时候碰到的,当时没做做出来,只想到用hashtable,但是实在是能力不够,短时间做不出来,回来后上网查了资料,发现确实有hashtable的解法,也有提出倒序遍历思想的,试了一下,下面是我的程序,如果有错误,还请朋友指出来,谢谢~
在网上搜索到一个hashtable的算法,只能针对不含数字的字符串进行处理,我上面给出的数据测试行不通,谁能帮忙改一下?
输入,“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;
}
在网上搜索到一个hashtable的算法,只能针对不含数字的字符串进行处理,我上面给出的数据测试行不通,谁能帮忙改一下?
#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;
}