题目:
给出一个字符串,判断其中是否有重复字符,有输出false,没有输出true。
输入在一行给出一个字符串
输出在一行输出true或false。
思路:
作为一个入坑题,这道题没有啥难度,但如果作为一个面试题,要问清楚考官是否使用的是ASCII码,还是uincode编码,这直接影响到解题的方法。下面以ASCII举例来解题。
第一种思路是开辟一个新的数组,对每个出现的的字符对应计数,有点像计数排序,时间复杂度为O(n),代码如下:
#include <bits/stdc++.h>
using namespace std;
char str[1005];
int a[150];
int main() {
gets(str);
int n = strlen(str);
for(int i=0;i<n;i++) {
a[str[i]]++;
if(a[str[i]]>1) {
printf("false\n");
return 0;
}
}
printf("true\n");
return 0;
}
如果不允许使用额外的数组,那就只能逐个检查了,时间复杂度为O(n^2),代码如下:
#include <bits/stdc++.h>
using namespace std;
char str[1005];
int main() {
gets(str);
int n = strlen(str);
for(int i=0;i<n;i++)
for(int j=i+1;j<n;j++)
if(str[i]==str[j]) {
printf("false\n");
return 0;
}
printf("true\n");
return 0;
}