资源限制
时间限制: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 <stdio.h>
#include <string.h>
int main() {
int l;
char a[61];
int max_times = 1;
int location = 0;
int lenth = 0;
scanf("%d", &l);
scanf("%s", &a);
for (int len = l; len <= strlen(a); len++) { //控制比较字串的长度
for (int i = 0; i + len <= strlen(a); i++) {//定义比较字串的首地址
int times = 0;
for(int j = 0; j + len <= strlen(a); j++){//遍历比较
int judge = 0;
for(int k = j; k < j + len; k++){
if(a[k] != a[i + k - j]){
judge = 1;
break;
}
}
if(judge == 0){
times ++;
}
}
if((times > max_times) || (len > lenth && times == max_times)){
max_times = times;
location = i;
lenth = len;
}
}
}
for(int i = location; i < location + lenth; i++){
printf("%c", a[i]);
}
}
题解优化:
使用c++的substr()函数会简化代码过程。
版权声明:本文为XTU_xyx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。