题目:判定字符串唯一
法一:哈希表
bool isUnique(char* astr){
int str[256] = {0};
int i;
while(astr[i]!='\0'){
str[astr[i]]++;
i++;
}
for(i=0;i<256;i++){
if(str[i]>1)
return false;
}
return true;
}
哈希表改进
bool isUnique(char* astr){
int str[256] = {0};
int i;
while(astr[i]!='\0'){
str[astr[i]]++;
if(str[astr[i]]>1)
return false;
i++;
}
return true;
}
只有各个字符都不相同的时候才完整的遍历一遍。
减少辅助数组数量
只是用26个字符
bool isUnique(char* astr){
int str[26] = {0};
int i;
while(astr[i]!='\0'){
str[astr[i]-'a']++;
if(str[astr[i]-'a']>1)
return false;
i++;
}
return true;
}
法二:排序
int quicksort_one(int start,int end,char* str){
char c = str[start];
while(start < end){
while(start < end && str[end] >= c)
end--;
str[start] = str[end];
while(start < end && str[start] <= c)
start++;
str[end] = str[start];
}
str[start] = c;
return start;
}
void quickSort(int start, int end, char* str){
if(start < end){
int mid = quicksort_one(start,end,str);
quickSort(start,mid-1,str);
quickSort(mid+1,end,str);
}
}
bool isUnique(char* astr){
int len = strlen(astr);
quickSort(0,len-1,astr);
int i;
for(i=0;i<len;i++){
if(astr[i] == astr[i+1])
return false;
}
return true;
}