Skip to content

Commit de08b02

Browse files
committed
algo(problems): spoj longcs lcs multiple strings
1 parent 860ded9 commit de08b02

File tree

2 files changed

+33
-0
lines changed

2 files changed

+33
-0
lines changed
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
int lcs_ks_strings(vector<string>& sts, int k) {
2+
vi fml;
3+
string t;
4+
for (int i = 0; i < k; i++) {
5+
t += sts[i];
6+
for (int j = 0; j < sts[i].size(); j++) fml.push_back(i);
7+
}
8+
9+
vi p = suffix_array(t);
10+
deque<int> lcp = lcp_suffix_array(t, p);
11+
lcp.push_front(0);
12+
13+
int l = 0, r = 0, cnt = 0, lcs = 0, n = p.size();
14+
vector<int> fr(k + 1);
15+
multiset<int> mst;
16+
while (l < n) {
17+
while (r < n and cnt < k) {
18+
mst.insert(lcp[r]);
19+
if (!fr[fml[p[r]]]++) cnt++;
20+
r++;
21+
}
22+
mst.erase(mst.find(lcp[l]));
23+
if (mst.size() and cnt == k) lcs = max(lcs, *mst.begin());
24+
fr[fml[p[l]]]--;
25+
if (!fr[fml[p[l]]]) cnt--;
26+
l++;
27+
}
28+
29+
return lcs;
30+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
\subsection{Longest Common Substring (LONGCS - SPOJ)}
2+
3+
Time: $N = \sum_{i = 1}^k |S_i|$; Suffix Array + LCP with Suffix Array + $O(N \cdot \log N)$

0 commit comments

Comments
 (0)