給定 26 字母加密表 S(S[i] 是明文 'a'+i 對應的密文字符)和截獲文本 T(密文+明文拼接,密文在前,明文在後,可能不全)。求最短可能的完整文本(密文全+明文全)。
len = |T|,則前 ⌈len/2⌉ 必屬於密文部分。dec[cipher] = plain。k = (len-1)/2,前 k+1 字符解密得 P。T 中從位置 k 開始,找最長後綴與 P 的前綴匹配(KMP 或雙指針)。T + P[匹配長度:]。// 逆表
char dec[256];
for (int i=0;i<26;++i) dec[S[i]] = 'a'+i;
// 解密前半
string P;
for (int i=0;i<=k;++i) P += dec[T[i]];
// KMP 在 T[k..] 中匹配 P
// ... 省略標準 KMP ...
// 輸出 T + P.substr(match_len)
O(n),KMP 線性。O(n)。S=abc..., T=abcdab → 解密前半 abcdab → 匹配得完整 abcdabcd。