不在意时间就双层循环一个一个查找,不在意空间就用一个新数组对各个出现的字符计数,并检查,若有大于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; }