题目描述:这道题是要求输入一个字符串,得到这个字符串中只出现一次的字符。
解析:当然这道题很明显了,直接遍历加进哈希表中就可以解决了,但是我这边用的是二维数组,array[2][56];array[0][x]存的是出现的次数,array[1][x]存的是出现的位置(也就是在字符串中什么位置出现),这样遍历一遍字符串就可以获取字符串中字符出现的次数和位置了,然后得到出现的次数为1的字符,并且比较出现的位置,选取最小的那个,弹出就可以了。时间复杂度O(N),只需要遍历一次字符串和存放字符的数组。
char getFirst(char *c,int len)
{
int times[2][52]={0,}
int tmp
int retTmp,min=999
char ret
for(int i=0
{
if(c[i]>='a'&&c[i]<='z')
{
tmp=c[i]-'a'
times[0][tmp]++
if((times[1][tmp])==0)
{
times[1][tmp]=i
}
}else if(c[i]>='A'&&c[i]<='Z')
{
tmp=c[i]-'A'
times[0][tmp+26]++
if((times[1][tmp+26])==0)
{
times[1][tmp+26]=i
}
}
}
tmp=-1
for(int i=0
{
//printf("%d--%d\n",times[0][i],times[1][i])
if(times[0][i]==1&×[1][i]<min)
{
retTmp=i
min=times[1][i]
tmp=0
}
}
if(tmp==0)
{
if(retTmp<26)
{
ret=97+retTmp
}else
{
ret=65+(retTmp-26)
}
}else
{
ret=NULL
}
return ret
}
int main()
{
char str[]="aMmPbvskAjFdGAjGHaAQKvYnOCsGdHaJhEfQgGsa"
int len=sizeof(str)/sizeof(str[0])
char ret=getFirst(str,len)
printf("%c\n",ret)
char str1[]="jkashjAjklVNMoi"
len=sizeof(str1)/sizeof(str1[0])
ret=getFirst(str1,len)
printf("%c\n",ret)
}