题意:给定一个字符串和数字n,求出长度大于等于n出现次数最多的字符串,如果有多个字符串,输出最长的,仍有相同的,输出第一个出现的。
思路:首先用vector数组保存字符串的所有的字串,保存的字串是按先后顺序求出来的,当长度,出现次数相同时,在前面的一定是字串中先出现的,然后统计每个字串出现的次数,依次保存在book数组里面。最后求出满足条件的字串下标k,输出
代码:
#include<iostream>
#include<vector>
#include<string>
using namespace std;
int main(){
int n,len;
string str;
cin>>n>>str;
len = str.length();//len保存的是最长的子串
vector<string> v;//v依次保存所有的可能的子串
for(int i=n;i<=len;i++){//把可能的子串
for(int j=0;j<=len-i;j++){
string tem = str.substr(j,i);
v.push_back(tem);
}
}
vector<int> book(v.size());//book保存字串出现的次数
for(int i=0;i<v.size();i++){//统计每个字串出现的次数
for(int j=0;j<v.size();j++){
if(i!=j&&v[i]==v[j]){
book[i]++;
}
}
}
int max=0,k=0;//max保存的是出现次数最多的长度的字串,k是对应字串的下标
for(int i=0;i<book.size();i++){
if(book[i]>max||(book[i]==book[k]&&v[i].length()>v[k].length())){
max = book[i];
k = i;
}
}
cout<<v[k];
return 0;
}