summaryrefslogtreecommitdiff
path: root/string/LCSubstring.cpp
diff options
context:
space:
mode:
authorPaul Jungeblut <paul.jungeblut@gmail.com>2016-10-15 00:58:10 +0200
committerPaul Jungeblut <paul.jungeblut@gmail.com>2016-10-15 00:58:10 +0200
commit53d83644c3bf9c37152aadee500e5e9bdb0514e1 (patch)
tree0d25f424aad134a2061f48c991845cec1801fabd /string/LCSubstring.cpp
parente6d20a2e8f4044b12fc4fc814c11d9a54522cf3c (diff)
Adding code for a suffix automaton doing longest common substring queries in linear time.
Diffstat (limited to 'string/LCSubstring.cpp')
-rw-r--r--string/LCSubstring.cpp26
1 files changed, 0 insertions, 26 deletions
diff --git a/string/LCSubstring.cpp b/string/LCSubstring.cpp
deleted file mode 100644
index 69d636f..0000000
--- a/string/LCSubstring.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//longest common substring.
-struct lcse {
- int i = 0, s = 0;
-};
-string lcp(string s[2]) {
- if(s[0].length() == 0 || s[1].length() == 0) return "";
- vector<lcse> a(s[0].length()+s[1].length());
- for(int k = 0; k < a.size(); k++) a[k].i=(k < s[0].length() ? k : k - s[0].length()), a[k].s = (k < s[0].length() ? 0 : 1);
- sort(a.begin(), a.end(), [&] (const lcse &u, const lcse &l) {
- int ui = u.i, li = l.i;
- while(ui < s[u.s].length() && li < s[l.s].length()) {
- if(s[u.s][ui] < s[l.s][li]) return true;
- else if(s[u.s][ui] > s[l.s][li]) return false;
- ui++; li++;
- }
- return !(ui < s[u.s].length());
- });
- int r = 0, m=0, c=0;
- for(int i = 0; i < a.size() - 1; i++) {
- if(a[i].s == a[i+1].s) continue;
- c = 0;
- while(a[i].i+c < s[a[i].s].length() && a[i+1].i+c < s[a[i+1].s].length() && s[a[i].s][a[i].i+c] == s[a[i+1].s][a[i+1].i+c]) c++;
- if(c > m) r=i, m=c;
- }
- return m == 0 ? "" : s[a[r].s].substr(a[r].i, m);
-}