Kyopro Library
 
読み取り中…
検索中…
一致する文字列を見つけられません
lcp_array.hpp
[詳解]
1#pragma once
2#include"../../kyopro_library/template.hpp"
3#include"../../kyopro_library/string/suffix_array.hpp"
4
5/// @brief LCP Array
6/// @brief `lcp[i] := sa[i] と sa[i-1] の lcp の長さ`
7/// @ref https://qiita.com/kgoto/items/9e28e37b8a4b15ea7230
8vector<int> LcpArray(const string &s, const vector<int>& sa) {
9 int n=s.size();
10 vector<int> lcp(n-1),rank(n);
11 for(int i=0; i<n; i++) rank[sa[i]]=i;
12
13 int len=0;//lcp の長さ
14 for(int i=0; i<n; i++) {
15 if(rank[i]==0) continue;
16 int j=sa[rank[i]-1];
17
18 while(i+len<n && j+len<n && s[i+len]==s[j+len]) len++;
19 lcp[rank[i]-1]=len;
20
21 if(len>0) len--;
22 }
23
24 return lcp;
25}
vector< int > LcpArray(const string &s, const vector< int > &sa)
LCP Array
Definition lcp_array.hpp:8