蓝桥杯 算法训练 子串统计(含答案,求讲解)

问题描述

  给定一个长度为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

using namespace std;

int main(int argc, char* argv[])

{

string s;//字符串s
int l;//长度l
cin >> l >> s;
int max = -2, id = 0;
int len = s.length();
string v, ans;
for (int i = l; i < len; i++) 
{
    int a = len - i + 1;
    for (int j = 0; j < a; j++)
    {
        int tmax = 0;
        v = s.substr(j, i);
        for (int k = 0; k < a; k++)
            if (v == s.substr(k, i))
                tmax++;
        if (tmax > max || (tmax == max && v.length() > ans.length())) {
            ans = v;
            max = tmax;
        }
    }
}
cout << ans;


return 0;

}

没看懂大佬的解答,有哪位大佬讲解一下吗

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^