蓝桥杯 算法训练 字串统计 (字符串、枚举)
2016-03-07 19:59
316 查看
算法训练 字串统计
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
第一行一个数字L。
第二行是字符串S。
L大于0,且不超过S的长度。
输出格式
一行,题目要求的字符串。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
数据规模和约定
n<=60
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
时间限制:1.0s 内存限制:512.0MB
问题描述
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
第一行一个数字L。
第二行是字符串S。
L大于0,且不超过S的长度。
输出格式
一行,题目要求的字符串。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
数据规模和约定
n<=60
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
#include <iostream> #include <cstdio> #include <cstring> #include <cctype> #include <algorithm> #include <vector> using namespace std; int main() { //freopen("input.txt", "r",stdin); int L; scanf("%d", &L); char s[100]; scanf("%s", s); int i, j, k, l, m; int len = strlen(s); char sub[100], ans[100]; int num = 0; int max = 0; for(i = L; i < len; i++) { for(j = 0; j < len - i; j++) { num = 0; for(k = j, l = 0; l < i; k++, l++) { sub[l] = s[k]; } //sub[l] = 0; //puts(sub); for(m = 0; m < len - i; m++) { int flag = 1; for(k = m, l = 0; l < i; k++, l++) { if(sub[l] != s[k]) { flag = 0; break; } } if(flag) { num++; } } //printf("%d\n", num); if(num > max || (num == max && i > strlen(ans))) { max = num; for(m = 0; m < i; m++) { ans[m] = sub[m]; } ans[m] = 0; } } } puts(ans); return 0; }
相关文章推荐
- 第一次上机实践 项目2 就那胖子说事
- Android学习笔记之Fast Json的使用
- Logistic回归算法
- [Offer收割]编程练习赛1 hihocoder 1269 优化延迟 (二分+优先权队列)
- Linux用户查看系统有多少用户在登录
- 翻硬币(贪心)
- 循环队列的基本操作实现
- 软件工程个人作业01
- OnTouch(),onTouchEvent(),onClick()的区别
- 文件类的写和读的方法详细讲解通熟易懂
- 动态转移方程 免费馅饼
- Eclipse中恢复已删除文件和还原到先前版本
- Google Zxing 二维码生成与解析
- Bootstrap新手常见问题
- POJ 1007
- 1036. Boys vs Girls (25)
- bootstrap小结
- 超炫黑客帝国字母雨效果
- arm看门狗的作用
- 《Java实战开发经典》第六章6.1