从一个字符串中找出第一个不重复字符

从一个字符串中找出第一个不重复字符:
输入,“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;        
}

你可能感兴趣的:(C++,c,算法,面试,C#)