貼出的代碼是典型的後綴數組 + LCP(最長公共前綴)數組求兩字符串最長公共子串(LCS)的實現。逐行拆解核心邏輯:
char *suff[100]:後綴指針數組,每個元素指向原串某個位置pstrcmp:qsort 比較函數,按字典序比較兩個後綴comlen_suff:計算兩後綴最長公共前綴長度,遇到 # 分隔符提前結束arr = X + '#' + Y,# 保證不跨串匹配suff[i] = &arr[i],共 xlen + ylen + 1 個後綴qsort(suff, len, sizeof(char*), pstrcmp),按字典序排序maxlen 及位置 suf_indexoutputLCS(suff[suf_index]) 打印前 maxlen 個字符Height[i] ≥ Height[i-1] - 1)S[i..j]Suffix(i) = S[i..n-1]SA[k] 為第 k 小後綴的起始位置,滿足 Suffix(SA[i]) < Suffix(SA[i+1])Height[i] = LCP(Suffix(SA[i]), Suffix(SA[i-1]))除非學習算法原理,**生產環境直接用** :
libdivsufsort、suffix_array (Boost)pysuffixarray、suffix_treesSuffixArray (Apache Commons Text)手寫 DC3/SA-IS 只為面試/競賽,項目中維護成本太高。