蓝桥杯:字串统计

来源:互联网 发布:java基础教程电子书 编辑:程序博客网 时间:2024/04/28 01:02

题目:

给定一个长度为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<cstring>using namespace std;int main(){    int l,a[61][61];    cin>>l;    string s,s1,s2;    cin>>s;    int len=s.length();    for(int k=l;k<=len;k++)     /*字符的长度*/    {        for(int i=0;i<=len-k;i++)   /*字符的所有的可能*/        {            int c=1;            s1=s.substr(i,k);            for(int j=i+1;j<=len-k;j++)    /*需要比较的字符*/            {                s2=s.substr(j,k);                if(s1==s2)                {                    c++;                }            }            a[k][i]=c;        }    }    /*a[k][i]:从s[i]的长度为k的字符 的个数*/    int x=l,y=0;    for(int k=l;k<=len;k++)    {        for(int i=0;i<=len-k;i++)        {            if(a[k][i]>=a[x][y] ) /*找出个数最多的字符*/            {                if(a[k][i]>a[x][y])                {                    x=k;                    y=i;                }                else if(a[k][i]==a[x][y]) /*如果个数相同,那么选择长度大的*/                {                    if(k>x)                    {                        x=k;                        y=i;                    }                }            }        }    }    cout<<s.substr(y,x)<<endl;    return 0;}


0 0