实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)
学习自 http://hawstein.com/posts/1.1.html
#include<stdio.h>
#include<string.h>
bool isunique1(char s[])
{
bool a[256];
memset(a,0,sizeof(a)); //注意初始赋值
int len=strlen(s);
for( int i=0;i<len;i++)
{
int v=(int)s[i];
if((a[v])==true) return false;
a[v]=true;
}return true;
}
bool isunique2(char s[])
{
int a[8];
memset(a,0,sizeof(a));
int len=strlen(s);
for(int i=0;i<len;i++)
{
int v=(int)s[i];
int n=v/32, shift=v%32;
if(a[n]&(1<<shift)) return false;
a[n] |=(1<<shift); //注意没有|是不对的
}return true;
}
void main()
{
char *s="i amstudent"; //两个空格也算是相同的字符
// gets(s);
puts(s);
bool sig1=isunique1(s);
printf("%d\n",sig1);
bool sig2=isunique2(s);
printf("%d\n",sig2);
int a[2]={0};
}