[CF427D]Match & Catch(后缀数组)

题目链接

题解

题目大意:求最小不重复相同子串。

考虑把两个字符串合并起来,求出sa,rk和Height数组。

我们可以从小到大枚举子串长度k,然后再枚举后缀。
具体来说,我们是根据子串字典序从小到大枚举后缀的
如果Height[i]不小于k(即第i-1个子串和第i个子串的最长公共前缀不小于k),
并且如果此后缀的起始点在第一个字符串,cnt1++
否则cnt2++

cnt1和cnt2分别代表最长公共子串出现在第一个字符串和第二个字符串的次数,由于是连续更新的,所以假如上一轮cnt1=1,现在更新cnt2=1那么说明这两个子符串有相同的长度大于k的公共子串,但是不是唯一还不知道。
也就是说这个数字只在两轮更新中有用,如果cnt1>1或cnt2>1都没有价值了(要么没有公共子串,要么有重复的)。
如果要确保唯一性,就要当Height[i]枚举到小于k的时候,如果此时cnt1==1&&cnt2==1的话,则有解。

代码

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇