算法训练 字串统计

来源:互联网 发布:警方破特大网络赌球 编辑:程序博客网 时间:2024/05/02 00:20

问题描述
  给定一个长度为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>#include<algorithm>#include<cstdlib>#include<fstream>using namespace std;int maxCounter=-1;string maxStr="";string getRes(int n,string str){int i,j;int counter=0;int len=str.length();for(i=0;i<len-n;i++){//获取其中一个子串 string s=str;//string temp=s.substr(i,i+n);string temp="";for(int kk=i;kk<i+n;kk++)temp+=s[kk];counter=0;//该字串的数量for(j=0;j<len-n;j++){s=str;//string comStr=s.substr(j,j+n);string comStr="";for(int k=j;k<j+n;k++)comStr+=s[k];//cout<<comStr<<endl;if(temp.compare(comStr)==0){counter++;} } if(counter>maxCounter ||(counter==maxCounter && temp.length()>maxStr.length())){maxCounter=counter;maxStr=temp;counter=0;}}return maxStr;}int main(){//freopen("input10.txt","r",stdin);    string str,res;int i,j,k,n; cin>>n;cin>>str;int maxLen=-1;for(i=0;i<=str.length()-n;i++){if(i==0){res=getRes(n,str);}else{n++;res=getRes(n,str);}}cout<<maxStr<<endl;return 0;}



0 0