藍橋杯 演算法訓練 ALGO 87 字串統計

2021-09-03 08:40:05 字數 1502 閱讀 4213

演算法訓練 字串統計

時間限制:1.0s 記憶體限制:512.0mb

問題描述

給定乙個長度為n的字串s,還有乙個數字l,統計長度大於等於l的出現次數最多的子串(不同的出現可以相交),如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。

輸入格式

第一行乙個數字l。

第二行是字串s。

l大於0,且不超過s的長度。

輸出格式

一行,題目要求的字串。

輸入樣例1:

4bbaabbaaaaa

輸出樣例1:

bbaa

輸入樣例2:

2bbaabbaaaaa

輸出樣例2:

aa資料規模和約定

n<=60

s中所有字元都是小寫英文本母。

提示列舉所有可能的子串,統計出現次數,找出符合條件的那個

分析:本題類似kmp演算法,在主串中搜尋子串。區別在於,這裡的子串有很多,只要符合條件的子串,我們都要搜尋一遍。然後統計他們出現的次數,將出現次數最多的子串輸出。

思路:將子串按照長度不同分別遍歷,若主串長度為n

nn,則

主串中長度大於等於l

ll的子串長度 有n−l

+1

n-l+1

n−l+1種,

長度為k的的種類中有n−l

+k

n-l+k

n−l+

k個子串,

分別判斷這些子串的重複次數。遍歷時從前向後,以滿足題意輸出第一次出現最早的。

這裡可以優化一下,如果發現重複的子串,可以把後面的該子串置空,下次遍歷到它的時候可以直接跳過,減少操作次數。

遍歷完長度為k的子串,保留出現次數最多的子串和其出現次數,在全部子串列舉結束後,對不同長度子串中出現次數最多的子串再進行比較,保留所有子串中出現次數最多的子串。這裡從子串長度最長的開始,以滿足題意輸出最長的。

#include #include using namespace std;

string fun(string s, int l)

//計算每個子串重複次數

for(int i = 0; i < num; i++)

}}

//比較,第幾個子串重複數最多

int a = n[0];

for(int i = 1; i < num; i++)

}nnn[l] = a;

// aaa[l] = temp[result];

aaa[l].insert( 0, temp[result]);

delete n;

delete temp;

} //最後的篩選

for(int l = len-l, ccc = nnn[len-l]; l >= 0; l--) }

//返回該子串的內容

return aaa[bbb];

}int main()

藍橋杯 ALGO 87 字串統計

演算法訓練 字串統計 時間限制 1.0s 記憶體限制 512.0mb 問題描述 給定乙個長度為n的字串s,還有乙個數字l,統計長度大於等於l的出現次數最多的子串 不同的出現可以相交 如果有多個,輸出最長的,如果仍然有多個,輸出第一次出現最早的。輸入格式 第一行乙個數字l。第二行是字串s。l大於0,且...

藍橋杯 演算法訓練 ALGO12

問題描述 如果乙個序列滿足下面的性質,我們就將它稱為擺動序列 1.序列中的所有數都是不大於k的正整數 2.序列中至少有兩個數。3.序列中的數兩兩不相等 4.如果第i 1個數比第i 2個數大,則第i個數比第i 2個數小 如果第i 1個數比第i 2個數小,則第i個數比第i 2個數大。比如,當k 3時,有...

藍橋杯 ALGO 83 演算法訓練 階乘

問題描述 乙個整數n的階乘可以寫成n 它表示從1到n這n個整數的乘積。階乘的增長速度非常快,例如,13 就已經比較大了,已經無法存放在乙個整型變數中 而35 就更大了,它已經無法存放在乙個浮點型變數中。因此,當n比較大時,去計算n 是非常困難的。幸運的是,在本題中,我們的任務不是去計算n 而是去計算...