优化前缀函数后(详情请点击此处),我们得到具有 O(n) 渐近性的最终算法:
矢量<int> prefix_function(字符串 s){ int n = (int ) s.长度(); 矢量<int>pi(n); 对于 (int i=1; i<n; ++i) { int j = pi[i-1< /跨度>]; 同时 (j > 0 && s[i] != s[j]) j = pi[j-1]; 如果 (s[i] == s[j]) ++跨度>j; pi[i] = j; } 返回pi; }
S
N
1
i
1000 ms 256 Mb Rules for program design and list of errors in automatic problem checking