問題描述:
找出字串中所以最長連續重複子串及其個數
比如:
輸入: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 ...