題意:給你一個字符串s, 要你求是否存在一個子串, 在s的前中後各出現一次。 求最大可能的子串長度。
思路:KMP變形, 我們首先要了解KMP的運行機制。 核心是失配函數f, f[i]表示在i點失配之後返回到f[i]這個點, 且能保證f[i]之前的部分和模板串匹配。 這樣的話, 我們就可以利用這個特點來處理該題了。 我們假設在最後一個字符處失配, 那麼它將返回f[len], 那麼在f[len]之前的部分肯定是和s串的後邊f[len]個字符相匹配的。 而前f[len]個字符是不用考慮的, 那麼我們需要考慮的就是中間的部分是否存在一個f[len]長度的前綴串。 該題因為模板串和匹配串一樣, 所以很有特點, 很特殊。 請讀者仔細品味。
細節參見代碼:
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include