sdnu 1099 前缀判断
来源:互联网 发布:晨曦造价软件 编辑:程序博客网 时间:2024/05/20 19:16
Description
给定 n 个字符串,求有多少字符串是其他字符串的前缀。
Input
第一行为一个整数n(1 <= n <= 1000),之后n行,每行一个字符串,字符串只由26个小写字母组成,最大长度为100。
Output
一个整数,有多少字符串是其他字符串的前缀。
Sample Input
5abcdeabbcdebcde
Sample Output
2
此题可用set容器处理
代码如下:
#include <iostream>#include <cstdio>#include <set>#include <cstring>using namespace std;int main(){ int n, i, j = 0; unsigned int t = 1; string strs[1005], x; set <string> s;//每一个被分开的字符串 set <string> c;//所有重复的字符串 scanf("%d", &n); for(i = 0; i < n; i++) cin >> strs[i] ; for(i = 0; i < n; i++){ for(int a = i + 1; a < n; a++){ if(strs[i] == strs[a])//判断输入的所有字符串是否有重复的 c.insert(strs[i]);break;}//将重复的放入容器中 } for(i = 0; i < n; i++){ for(t = 1; t < strs[i].length(); t++){ x = strs[i].substr(0, t); s.insert(x);//将分开的字符串放入容器中 } } for(i = 0; i < n; i++){ if(s.count(strs[i]) != 0) j++;//利用循环判断分开的字符串的容器中与总的是否有重合的 else if(c.count(strs[i]) != 0) j++;//判断是否有重复的字符串,此种情况可以互为前缀 } printf("%d", j); return 0;}有几个知识点需要掌握:
1.string类型只用一般cin输入;
2.
if(s.count(strs[i]) != 0)
此句是判断容器s中的元素能否在strs数组中找到,能找到就return 1,找不到就return0
3.substr(a,b)是将字符串从第a+1位到b+1位分开;
4.判断数组中是否有相同元素还有一种较为简单的方法(借用他人思路)
set <string> part;//截取每个字符串的部分放入里面 set <string> quan;//将每个字符串放入里面 set <string> chong;//重复的字符串放入里面 for(i=0; i<n; i++) { cin >> s[i]; if( quan.count(s[i])!=0 )//说明该容器里有这个字符串,返回值为1;否则为零; chong.insert (s[i]); quan.insert (s[i]);}
阅读全文
0 0
- sdnu 1099 前缀判断
- sdnu oj 1099 前缀判断
- sdnu 1099
- 前缀判断
- 前缀判断
- 前缀判断
- 前缀判断
- 前缀判断
- 前缀判断
- 前缀判断
- 前缀判断
- SDNU 1301.判断相等 字符串比较数字
- SDNU 1490.Problem_H Miller_Rabin算法判断素数
- poj 1056 判断前缀
- 前缀判断 - 蓝桥杯
- 前缀判断--蓝桥杯
- 1005-前缀判断
- 2013 前缀判断
- C++继承内存布局
- 11/12训练日记 数位dp专题结束
- NOIP2017 睡觉记
- Spring IOC知识点总结
- 1305 Pairwise Sum and Divide
- sdnu 1099 前缀判断
- Mysql复习秘籍
- python基础-13-PyCharm工具常见问题
- 九.ARM裸机学习之串口通信详解1(串口通信接口及原理框图详解)
- 一个java写的贪心算法实现删数问题
- 通过修改Host文件访问dl.google.com下载更新AndroidSDK
- Theatre Square
- Spring 知识点提炼
- “精通”的代价--C++后端开发知识点