1501110919-蓝桥杯-算法训练 字串统计

算法训练 字串统计

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

  提示

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

解题思路

就像题目提示所说的,枚举所有可能出现的子串,注意题目说的是长度大于等于L的子串,要用一层循环来控制L的变化。长度为n的子串在长度为len的总串中可以有len-n个。定义一个结构体来存储各种形式的子串、其长度、其出现次数。

最后根据题目要求:如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的排序。

代码

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
struct chuan
{
	char s[70];
	int sum;
	int lens;//这个是为了记录不同子串的长度
}ss[2000];//n的数目+(n+1)的数目+...+len的数目,最多有1+2+...+60
bool cmp(chuan a,chuan b)
{
	if(a.sum!=b.sum)
	    return a.sum>b.sum;
	else
	    return a.lens>b.lens;
}
//题目要求:如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的。
char sss[70];
char now[70];
int main()
{
	int n;
	int len;
	int ok;
	int i,j,k,l;
	int num;
	scanf("%d",&n);
	getchar();
	scanf("%s",sss);
	len=strlen(sss);
	memset(ss,0,sizeof(ss));
	num=0;//存储一共有几种子串
	while(n<=len)//统计长度大于等于L的出现次数最多的子串
	{
	    for(i=0;i<len-n;i++)
	    {//总串长len,子串长度为n的共有len-n个
		    for(j=i,k=0;j<i+n;j++,k++)
		        now[k]=sss[j];
		    //设置一个临时数组预存子串
		    ok=1;
		    for(l=0;l<num;l++)
		        if(strcmp(now,ss[l].s)==0)
		        {
		        	//如果存在相同子串,则该字串数目+1
		    	    ok=0;
		    	    ss[l].sum++;
		    	    break;
		        }
		    if(ok==1)//否则将其作为新的子串加入其中
		    {
			    strcpy(ss[num].s,now);
			    ss[num].sum++;
			    ss[num].lens=n;
			    num++;
		    }
		    memset(now,0,sizeof(now));
	    }
	    n++;
    }
	sort(ss,ss+num,cmp);
	for(i=0;i<n;i++)
	    printf("%c",ss[0].s[i]);
	printf("\n");
	return 0;
}
时间: 2024-08-06 07:30:09

1501110919-蓝桥杯-算法训练 字串统计的相关文章

java 蓝桥杯算法提高 字串统计

思路:这道题用HashMap来保存枚举的字串,key值保存字串-value值保存字串所出现的次数:         通过for循环并使用subString()方法枚举所有符合要求的子串maxStr记录出现次数最多的字串,          maxValue记录其出现的次数 1截取到的长度大于等于l的子串先比较是否已经存在map里, 1.1若存在,取出它的次数并+1.和最大次数比较 1.1.1若大于最大次数,将这个次数赋给最大次数,并且将子串赋给最大次数的子串 1.1.2若等于最大次数,再判断这两

算法训练 字串统计

问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的. 输入格式 第一行一个数字L. 第二行是字符串S. L大于0,且不超过S的长度. 输出格式 一行,题目要求的字符串. 输入样例1: 4 bbaabbaaaaa 输出样例1: bbaa 输入样例2: 2 bbaabbaaaaa 输出样例2: aa 数据规模和约定 n<=60 S中所有字符都是小写英文字母. 提示 枚举所有可

蓝桥杯训练 字串统计 (暴力+substr)

算法训练 字串统计 时间限制:1.0s   内存限制:512.0MB 问题描述 给定一个长度为n的字符串S,还有一个数字L,统计长度大于等于L的出现次数最多的子串(不同的出现可以相交),如果有多个,输出最长的,如果仍然有多个,输出第一次出现最早的. 输入格式 第一行一个数字L. 第二行是字符串S. L大于0,且不超过S的长度. 输出格式 一行,题目要求的字符串. 输入样例1: 4 bbaabbaaaaa 输出样例1: bbaa 输入样例2: 2 bbaabbaaaaa 输出样例2: aa 数据规

蓝桥杯——算法训练之乘积最大

问题描述 今年是国际数学联盟确定的"2000--世界数学年",又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得以参加.活动中,主持人给所有参加活动的选手出了这样一道题目: 设有一个长度为N的数字串,要求选手使用K个乘号将它分成K+1个部分,找出一种分法,使得这K+1个部分的乘积能够为最大. 同时,为了帮助选手能够正确理解题意,主持人还举了如下的一个例子: 有一个数字串:312, 当N=3,K=1时

蓝桥杯 算法训练 ALGO-139 s01串

算法训练 s01串 时间限制:1.0s 内存限制:256.0MB 问题描述  s01串初始为"0"  按以下方式变换  0变1,1变01 输入格式  1个整数(0~19) 输出格式  n次变换后s01串 样例输入 3 样例输出 101 数据规模和约定  0~19 示例代码: 1 import java.util.Scanner; 2 3 public class Main { 4 static StringBuffer sb = new StringBuffer(); 5 public

蓝桥杯算法训练&lt;一&gt;

一.图形显示[此题虽然简单,但是需啊哟注意的是,每个“*”后边有一个空格] 问题描述 编写一个程序,首先输入一个整数,例如5,然后在屏幕上显示如下的图形(5表示行数): * * * * * * * * * * * * * * * 1 import java.util.Scanner; 2 3 public class Main { 4 public static void main(String[] args) { 5 Scanner mScanner = new Scanner(System.

蓝桥杯 算法训练 ALGO-57 删除多余括号

算法训练 删除多余括号 时间限制:1.0s   内存限制:512.0MB 问题描述 从键盘输入一个含有括号的四则运算表达式,要求去掉可能含有的多余的括号,结果要保持原表达式中变量和运算符的相对位置不变,且与原表达式等价,不要求化简.另外不考虑'+' '-'用作正负号的情况,即输入表达式不会出现(+a)或(-a)的情形. 输入格式 表达式字符串,长度不超过255, 并且不含空格字符.表达式中的所有变量都是单个小写的英文字母, 运算符只有加+减-乘*除/等运算符号. 输出格式 去掉多余括号后的表达式

蓝桥杯 算法训练 ALGO-124 数字三角形

算法训练 数字三角形 时间限制:1.0s   内存限制:256.0MB 问题描述 (图3.1-1)示出了一个数字三角形. 请编一个程序计算从顶至底的某处的一条路 径,使该路径所经过的数字的总和最大. ●每一步可沿左斜线向下或右斜线向下走: ●1<三角形行数≤100: ●三角形中的数字为整数0,1,-99: . (图3.1-1) 输入格式 文件中首先读到的是三角形的行数. 接下来描述整个三角形 输出格式 最大总和(整数) 样例输入 573 88 1 02 7 4 44 5 2 6 5 样例输出 3

蓝桥杯 算法训练 ALGO-125 王、后传说

算法训练 王.后传说 时间限制:1.0s   内存限制:256.0MB 问题描述 地球人都知道,在国际象棋中,后如同太阳,光芒四射,威风八面,它能控制横.坚.斜线位置. 看过清宫戏的中国人都知道,后宫乃步步惊心的险恶之地.各皇后都有自己的势力范围,但也总能找到相安无事的办法. 所有中国人都知道,皇权神圣,伴君如伴虎,触龙颜者死...... 现在有一个n*n的皇宫,国王占据他所在位置及周围的共9个格子,这些格子皇后不能使用(如果国王在王宫的边上,占用的格子可能不到9个).当然,皇后也不会攻击国王.