判断字符串中是否有重复字符

来源:互联网 发布:unity3d粒子系统教程 编辑:程序博客网 时间:2024/05/01 20:13
实现一个算法来判断一个字符串中的字符是否唯一(即没有重复).不能使用额外的数据结构。 (即只使用基本的数据结构)学习自 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};}