您的位置:首页 > 其它

sdnu1099.前缀判断

2017-11-10 17:51 225 查看
1099.前缀判断

Time Limit: 1000 MS Memory Limit: 32768 KB

Total Submission(s): 421 Accepted Submission(s): 58

Description

给定 n 个字符串,求有多少字符串是其他字符串的前缀。

Input

第一行为一个整数n(1 <= n <= 1000),之后n行,每行一个字符串,字符串只由26个小写字母组成,最大长度为100。

Output

一个整数,有多少字符串是其他字符串的前缀。

Sample Input

5

abcde

ab

bcde

b

cde

Sample Output

2

Source

Unknown

#include<cstdio>
#include<iostream>
#include <cmath>
#include<string>
#include<set>
#include<iterator>
#include<cstring>
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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: