您的位置:首页 > 其它

算法训练字串统计

2018-01-31 21:03 204 查看
 算法训练 字串统计  

时间限制: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中所有字符都是小写英文字母。

提示

  枚举所有可能的子串,统计出现次数,找出符合条件的那个

用vector直接存字符串,配合substr函数,最后再找就可以了,枚举题

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int l;
vector<string> v;
string s;
cin >> l >> s;
for(int i = l;i <= s.size();i ++)
{
for(int j = 0;j <= s.size() - i;j ++)
{
string t = s.substr(j,i);
v.push_back(t);
}
}
//以上为截取 字符串存入数组

vector<int>find(v.size()+1);
int maxn,location;
maxn = location =  0;
for(int i = 0;i < v.size();i ++)
{
for(int j = 0;j < v.size();j ++)
{
if(i != j && v[i] == v[j])
find[i] ++ ;
}
}
for(int i = 0;i < find.size();i ++)
{
if(find[i] > maxn || (find[i] == maxn && v[i].size() > v[location].size()))
{
maxn = find[i];
location = i;
}
}
cout << v[location];
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: