看了好久的字尾自動機_(:з」∠)_
對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,如果它們都包含一段位置不一定連續的數字,且數字是嚴格遞增的,那麼稱這一段數字是兩個...