您的位置:首页 > 其它

蓝桥杯 算法训练 字串统计 (字符串、枚举)

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中所有字符都是小写英文字母。

提示

  枚举所有可能的子串,统计出现次数,找出符合条件的那个

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