最大連續相同的字元

2021-10-21 11:53:13 字數 1151 閱讀 6601

有乙個僅包含』a』和』b』兩種字元的字串s,長度為n,每次操作可以把乙個字元做一次轉換(把乙個』a』設定為』b』,或者把乙個』b』置成』a』);但是操作的次數有上限m,問在有限的運算元範圍內,能夠得到最大連續的相同字元的子串的長度是多少。

輸入描述:

第一行兩個整數 n , m (

1<=m<=n<=

50000

),第二行為長度為n且只包含』a』和』b』的字串s。

輸出描述:

輸出在操作次數不超過 m 的情況下,能夠得到的 最大連續 全』a』子串或全』b』子串的長度。
示例1

輸入:

8

1aabaabaa

輸出:

5
說明

把第乙個 'b' 或者第二個 'b' 置成 'a',可得到長度為 5 的全 'a' 子串。
分析:最長的字元一定是連續替換掉m個以後的得到的字串,所以分a和b兩種情況,先把所有a或b的位置找出來,然後依次遍歷每種 連續替換m個的情況,其中最長的就是答案

#include

using

namespace std;

int n,m;

string str;

intgetmax

(char aim)

record.

push_back

(n);

int lmax;

if(m>=record.

size()

)return n;

//如果可用的替換次數 大於 需要替換的個數

else lmax = record[m]

;//前m個都替換後的總長度

for(

int i=m+

1;isize()

;i++

)return lmax;

}int

main()

最大連續和

這個問題對我來說還挺難的,當初做dp時水過去了,但沒徹底理解,這次打算好好分析一下,爭取徹底搞懂。首先,像 1 1 2 2 3 3 4 4 5 5這樣的數列,想要找連續最大和,可以有很多種方法,從最慢的列舉o n 3 到最快的動態規劃o n 毫無疑問,我們要選擇複雜度低的演算法。所以我這裡就只分析兩...

最大連續和

求陣列中數的最大連續和,如 1,1,1,1,1 最大連續和為3 一 動態規劃 當我們從頭到尾遍歷這個陣列的時候,對於陣列裡的乙個整數,它有幾種選擇呢?它只有兩種選擇 1 加入之前的subarray 2.自己另起乙個subarray。那什麼時候會出現這兩種情況呢?設狀態為f j 表示以s j 結尾的最...

最大連續和

給出乙個長度為n的序列a1,a2,an,求最大連續和 使用列舉 時間複雜度o n 3 best a 1 初始最大值 for int i 1 i n i 設si a1 a2 ai,則ai ai 1 aj sj si 1 連續子串行的和等於兩個字首之差 時間複雜度o n 2 s 0 0 for int ...