找出所有最長連續重複子串及其個數

2021-09-23 20:00:21 字數 902 閱讀 3416

問題描述:

找出字串中所以最長連續重複子串及其個數

比如:

輸入:123234,最大連續重複字串為23,個數為2

輸入:5555,最大連續重複字串為555,個數為2

輸入:aaabbb 最大連續重複字串為aa,個數為2;和bb,個數為2

必須存在重複的字串才算,只出現一次的不算。可能存在多個相同長度的不同字串,比如aaabbb。

與[求乙個字串中連續出現次數最多的子串]的區別體現在兩個方面:一是要找最長子串(重複次數大於等於2即可);二是要考慮子串是有重疊的重複,如eeee的最長子串為eee。在上一題中, 有重疊的肯定不是連續出現次數最多的。

#include 

#include

#include

#include

#include

using

namespace

std;

vector

int, string>> fun(const

string& str)

int count = 1;

int maxcount = 1;

int sublen = 1;

string sub;

//i為子串的長度

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

}if (count >= 2)

sublen = i;

maxcount = count;

sub = subs[j].substr(0, i);

res.push_back(make_pair(maxcount, sub));}}

}return res;

}int main()

最長重複子串

首先這是乙個單字串問題。子字串r 在字串l 中至少出現兩次,則稱r 是l 的重複子串。重複子串又分為可重疊重複子串和不可重疊重複子串。方法 kmp演算法求解 在kmp演算法的關鍵就是求解next陣列,針對next j k,可以得到p 0,1,k 1 p j k,j k 1,j 1 看到p 0,1,k...

最長重複子串

思路 使用字尾陣列解決 分析 1 由於要求最長公共子串行,則需要找到字串的所有子串,即通過產生字串的字尾陣列實現。2 由於要求最長的重複子串,則需要對所有子串進行排序,這樣可以把相同的字串排在一起。3 比較 相鄰字串,找出兩個子串中,相同的字元的個數。注意,對於乙個子串,乙個與其重複最多的字串肯定是...

最長連續不重複子序列

給定乙個長度為n的整數序列,請找出最長的不包含重複數字的連續區間,輸出它的長度。第一行包含整數n。第二行包含n個整數 均在0 100000範圍內 表示整數序列。共一行,包含乙個整數,表示最長的不包含重複數字的連續子串行的長度。1 n 100000 51 2 2 3 5 暴力 for int i 0 ...