不在意时间就双层循环一个一个查找,不在意空间就用一个新数组对各个出现的字符计数,并检查,若有大于1的,则有重复字符,可判结。
#include<stdbool.h>
bool isUnique(char* str ) {
int len = strlen(str);
if(len <= 1)
return true;
int i = 0, j = 0;
for(i = 0; i < len; i++){ //外层循环的字符是基础,就是问后面有没有和这个字符重复的
for(j = i+1; j<len; j++){ //内层循环是变数,就是问这个字符是不是和基础字符一样
if(str[i] == str[j])
return false; //一旦有重复的就收网
}
}
return true;
}
计数法:这里用长度为256的数组计数,如果只有大写或小写字母,可用长度为26的数组计数更省空间。
#include<stdbool.h>
bool isUnique(char* str ) {
int len = strlen(str);
if(len <= 1)
return true;
int i = 0, j = 0;
int cnt[256] = {0};
for(i = 0; i < len; i++){
cnt[str[i]]++;
if(cnt[str[i]]> 1)
return false;
}
return true;
}

京公网安备 11010502036488号