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
8
vector
<
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
}
LcpArray
vector< int > LcpArray(const string &s, const vector< int > &sa)
LCP Array
Definition
lcp_array.hpp:8
string
lcp_array.hpp
構築:
1.13.2