字串统计 --- 蓝桥杯
来源:互联网 发布:centos shadowsock搭建 编辑:程序博客网 时间:2024/04/28 01:43
问题描述
给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
输入格式
第一行一个数字L。
第二行是字符串S。
L大于0,且不超过S的长度。
第二行是字符串S。
L大于0,且不超过S的长度。
输出格式
一行,题目要求的字符串。
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
输入样例1:
4
bbaabbaaaaa
输出样例1:
bbaa
输入样例2:
2
bbaabbaaaaa
输出样例2:
aa
数据规模和约定
n<=60
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
S中所有字符都是小写英文字母。
提示
枚举所有可能的子串,统计出现次数,找出符合条件的那个
解题分析:
这里的想法是既然给了长度的显示,那么就可以从S到L之间的长度查找,从最后一个字母往前找。
一次循环,查找。
#include <iostream>
#include <cstdio>#include <string>
using namespace std;
bool isSubStr(string str, int index1, int index2, int len)
{
for(int i = 0; i != len; i++)
{
if(str[index1 + i] != str[index2 + i])
return false;
}
return true;
}
int repeat(string str, int index, int len)
{
int rep = 1;
for(int i = index + 1 ; i < str.size() - len; i++)
{
if(isSubStr(str, index, i, len))
++rep;
}
return rep;
}
int main()
{
int L;
string S;
cin >> L >> S;
int maxRep = 0, maxIndex = 0, maxLen = 0;
for(int len = S.size() - 1; len != L - 1; len--)
{
for(int i = 0; i != S.size(); i++)
{
int rep = repeat(S, i, len);
if(maxRep < rep)
{
maxRep = rep;
maxIndex = i;
maxLen = len;
}
}
}
cout<<S.substr(maxIndex, maxLen);
return 0;
}
0 0
- 【蓝桥杯训练】字串统计
- 字串统计 --- 蓝桥杯
- 蓝桥杯 - 字串统计
- 蓝桥杯—字串统计
- 蓝桥杯:字串统计
- java 蓝桥杯 字串统计
- 蓝桥杯 字串统计
- 蓝桥杯 算法训练 字串统计
- 蓝桥杯 算法训练 字串统计
- 蓝桥杯--算法训练 字串统计
- 蓝桥杯 算法训练 字串统计
- 字串统计——蓝桥杯
- 蓝桥杯 算法训练 字串统计
- 蓝桥杯 算法训练 字串统计
- 蓝桥杯——字串统计
- 蓝桥杯-字串统计(java)
- 蓝桥杯 算法训练 字串统计
- [蓝桥杯]算法训练 字串统计
- Uva 10305 拓扑排序
- c++内存池
- 表的创建,查看、修改与删除
- 凸包算法分析
- 迷宫问题-广度优先搜索
- 字串统计 --- 蓝桥杯
- c#代码统计程序
- Android应用程序的生命周期
- openMP 使用 VC6+Intel Compiler 9.1
- codeforces 525E Anya and Cubes (暴力+中途相遇法)
- mysql基本使用
- 玩转ptrace
- Android的ram_console和last_kmsg
- 架构师之路(1)