This documentation is automatically generated by online-judge-tools/verification-helper
View the Project on GitHub Kyo-s-s/Library
#include "String/LCPArray.hpp"
vector<int> LCPArray(string S, vector<int> sa)
$S$ の長さを $N$ として, 長さ $N$ の配列を返す. $i$番目の要素はsa[i]とsa[i+1]の最長共通接頭辞.
sa[i]
sa[i+1]
sa
vector<int> LCPArray(const string& s, const vector<int>& sa) { int n = s.size(); vector<int> rank(n + 1); for (int i = 0; i <= n; i++) { rank[sa[i]] = i; } vector<int> lcp(n, 0); int h = 0; for (int i = 0; i < n; i++) { int j = sa[rank[i] - 1]; if (h > 0) h--; for (; j + h < n && i + h < n; h++) { if (s[j + h] != s[i + h]) break; } lcp[rank[i] - 1] = h; } return lcp; }
#line 1 "String/LCPArray.hpp" vector<int> LCPArray(const string& s, const vector<int>& sa) { int n = s.size(); vector<int> rank(n + 1); for (int i = 0; i <= n; i++) { rank[sa[i]] = i; } vector<int> lcp(n, 0); int h = 0; for (int i = 0; i < n; i++) { int j = sa[rank[i] - 1]; if (h > 0) h--; for (; j + h < n && i + h < n; h++) { if (s[j + h] != s[i + h]) break; } lcp[rank[i] - 1] = h; } return lcp; }