传送门 : 前缀判断
1099.前缀判断
Description
给定 n 个字符串,求有多少字符串是其他字符串的前缀。
Input
第一行为一个整数n(1 <= n <= 1000),之后n行,每行一个字符串,字符串只由26个小写字母组成,最大长度为100。
Output
一个整数,有多少字符串是其他字符串的前缀。
Sample Input
5 abcde ab bcde b cde
Sample Output
2
代码如下:
#include<string>
#include<set>
#include<iterator>
#include<cstring>
#include<iostream>
using namespace std;
#define N 10001
using namespace std;
int main()
{
int n,t=0,b,a;
string c[1010];
set <string> s; //存储所有前缀
set <string> p; //判断是否出现过重复字符串
set <string> chu; //存储重复出现过的字符串
cin >> n;
for(int i=0; i<n; i++){
cin >> c[i];
if(p.count(c[i])) //判断是否出现过重复字符串
{
chu.insert(c[i]); //将重复出现的字符串放入其中
}
p.insert(c[i]);
//cout << c[i].length() <<endl;
for(int j=1; j<c[i].length(); j++){
string str=c[i].substr(0,j); //找出所有的前缀放入s中
s.insert(str);
}
}
for(int i=0; i<n; i++){
if(chu.count(c[i])) //如果重复出现过,他一定是其他字符串的前缀
t++;
else if(s.count(c[i])) //如果他是其他字符串的前缀
t++;
else continue;
}
cout << t << endl;
return 0;
}