bzoj2320 最多重複子串

2022-05-31 03:33:20 字數 1193 閱讀 5877

time limit: 40 sec  memory limit: 128 mb

submit: 246  solved: 66

[submit][status][discuss]

乙個字串p的重複數定義為最大的整數r,使得p可以分為r段連續且相同的子串。比方說,「ababab」的重複數為3,「ababa」的重複數為1。

your task

對於給定的串s,找出s的乙個子串k使得k的重複數最大。

第一行t表示資料組數

對於每組資料,一行中乙個僅包含小寫字母的字串s

對於每組資料,在一行中輸出k

,如果有多個解,輸出字典序最小的那乙個

2ccabababc

daabbccaa

ababab

aa100%:t≤10,s的長度不超過100000

題解

……我就來貼個**吧……orz下claris……

1 #include2 #include3 #include4 typedef unsigned long

long

ll;5

const

int n=100010,base=127;6

int ans,k,st,ed,n,m,time,i,l;char

s[n];ll f[n],pow[n];

7using

namespace

std;

8 ll hash(int l,int r)

9int lcs(int x,int

y)10

16return

l;17}18

int lcp(int x,int

y)19

27return

l;28}29

void up(int x,int

y)30

32int l0=ed-st+1,l1=y-x+1,t=lcp(x,st);

33if(t==min(l0,l1))

37if(s[st+t]>s[x+t])38}

39int

main()

4058

for(int i=st;i<=ed;i++)putchar(s[i]);puts(""

);59}60

return0;

61 }

view code

最長重複子串

首先這是乙個單字串問題。子字串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 比較 相鄰字串,找出兩個子串中,相同的字元的個數。注意,對於乙個子串,乙個與其重複最多的字串肯定是...

求最長重複子串 和 最長不重複子串 思路

題目 求任意乙個字串中的所有最長重複字串和所有最長不重複子串 最長不重複子串的解法 設定乙個輔助資料結構 如map 記錄每個字元最後一次出現的位置 遍歷字串中的每個字元,如果在map中沒有出現,則不重複子串的長度 1,並更新最大字串的長度值 如果在map中已經出現過,則更新當前字元在map中的位置和...