程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 1501110919-藍橋杯-算法訓練 字串統計

1501110919-藍橋杯-算法訓練 字串統計

編輯:C++入門知識

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
#include
#include
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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved