CodeVS 3160 最長公共子串

2022-05-11 23:10:27 字數 555 閱讀 6578

看了好久的字尾自動機_(:з」∠)_

對a串建立sam,用b串去匹配a串sam,如果在當前節點走不下去,就跳到當前節點的parent(類似ac自動機的失配指標),找到當前節點代表的狀態中長度最長的字尾,並看能不能繼續走下去。

如果跳到了能繼續走下去的節點,就更新l為這個節點的max+1,同時在這個節點往下走一步(更新l和繼續走不能顛倒,因為往下走一步之後的節點的max值並不能確定)。

照搬clj課件裡的模板

#include#include#includeusing namespace std;

struct state

} *root, *last;

void extend(int w)

} last = np;

}int la, lb;

char a[100003], b[100003];

void work() else

ans = max(ans, l);

} printf("%d\n", ans);

}int main()

SAM codevs3160 最長公共子串

題目大意 求兩個字串的最長公共子串。思路 對第乙個字串建立字尾自動機,第二個字串去匹配。cnt記錄當前最長公共子串的長度,而ret記錄答案。p代表位置指標,初始在rt位置。對於第二個字串的某一位s i 如果當前有s i 孩子,則cnt 1,繼續往後移動 否則沿著pre指標返回。如果pre指標返回到0...

COdevs1425最長公共子串

題目描述 description 輸入n 2 n 20 個字串,輸出最長公共子串。輸入描述 input description 輸入n再輸入n個字串 輸出描述 output description 輸出最大公共子串。樣例輸入 sample input 3abce cabk jaab 樣例輸出 sam...

CODEVS 1408 最長公共子串行

題目描述 description 熊大媽的奶牛在小沐沐的薰陶下開始研究資訊題目。小沐沐先讓奶牛研究了最長上公升子串行,再讓他們研究了最長公共子串行,現在又讓他們要研究最長公共上公升子串行了。小沐沐說,對於兩個串a,b,如果它們都包含一段位置不一定連續的數字,且數字是嚴格遞增的,那麼稱這一段數字是兩個...