麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發(fā)設計 > 正文

POJ 2774 & URAL 1517(最長公共子串)

2019-11-14 09:10:12
字體:
來源:轉載
供稿:網(wǎng)友

題目鏈接:

URAL-1517 POJ-2774

題目大意:

就是給兩個字符串,求最長公共子串。

解題思路:

法一:常規(guī)動態(tài)規(guī)劃

好像是可以的(雖然我自己沒試(~ ̄▽ ̄)~) 因為常規(guī)的LCS是O(n^2)的,所以講LCS轉化成LIS,就可以在O(n log n)的時間內完成。 具體的講解看:LCS的nlogn法

法二:后綴數(shù)組

這個方法非常好,好像處理后綴數(shù)組可以使用O(n)或O(n log n) 不過后來查詢的時候可以做到O(n)

先將兩個字符串用 “#” 連接起來,比如 ‘abab’ + ‘nskfn’ —> ‘abab#nskfn’再來求他們的后綴數(shù)組,包括height的值,然后查詢每個height,記錄符合條件的最大值(條件:sa[i-1]和sa[i]在連接”#”的兩側) 然后就ok了。。。(^-^)V

下面是代碼:

#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define rep(i,x,y) for(int i = x;i <= y;i++)#define dep(i,x,y) for(int i = x;i >= y;i--)#define N 200010char str[N];int sa[N],r[N],h[N],s[N];int l1,l2,n;void read(){ scanf("%s",str); l1 = strlen(str); rep(i,0,l1-1) s[i] = str[i]; s[l1] = '$'; scanf("%s",str); l2 = strlen(str); rep(i,l1+1,l1+l2) s[i] = str[i - l1 - 1]; s[n = l1+l2+1] = 0;}int c[N],t[N],t1[N];void build(int n,int m){ int *x = t,*y = t1; rep(i,0,m-1) c[i] = 0; rep(i,0,n-1) c[x[i] = s[i]] ++; rep(i,1,m-1) c[i] += c[i-1]; for(int i = n-1;i >= 0;i--) sa[--c[x[i]]] = i; int p = 1; for(int k = 1;k < n;k <<= 1) { p = 0; rep(i,n-k,n-1) y[p++] = i; rep(i,0,n-1) if(sa[i] >= k) y[p++] = sa[i] - k; rep(i,0,m-1) c[i] = 0; rep(i,0,n-1) c[ x[y[i]] ]++; rep(i,1,m-1) c[i] += c[i-1]; for(int i = n-1;i >= 0;i--) sa[--c[ x[y[i]]]] = y[i]; swap(x,y);p = 1;x[sa[0]] = 0; rep(i,1,n-1) x[sa[i]] = y[sa[i]]==y[sa[i-1]] && y[sa[i]+k]==y[sa[i-1]+k] ? p-1 : p++; if(p >= n) break; m = p; }}void getheight(){ rep(i,1,n) r[sa[i]] = i; int k = 0; rep(i,0,n) { if(k) k--; int j = sa[r[i]-1]; while(s[i+k] == s[j+k]) k++; h[r[i]] = k; }}int main(){ read(); build(n+1,200); getheight(); int maxn = 0; rep(i,1,n) if(h[i] > maxn) { if(sa[i-1] < l1 && sa[i] > l1) maxn = h[i]; if(sa[i-1] > l1 && sa[i] < l1) maxn = h[i]; }
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 欧美日韩夜夜 | 羞羞色在线观看 | 欧美老外a级毛片 | 桥本有菜免费av一区二区三区 | 久久国产亚洲视频 | 毛片视频免费观看 | 国产美女视频一区二区三区 | 黄色片网站在线播放 | 成人爱爱电影 | 男男啪羞羞视频网站 | 国产精品毛片va一区二区三区 | 狠狠色成色综合网 | 经典三级av在线 | 亚洲成人夜色 | 91精品片 | 中文字幕欧美在线 | 日本精品久久久久 | 嫩呦国产一区二区三区av | 久久久久北条麻妃免费看 | 午夜小电影 | 中文字幕在线观看成人 | 182tv成人福利视频免费看 | 日操操夜操操 | 日韩精品网站在线观看 | 久久久久电影网站 | 又黄又爽免费无遮挡在线观看 | 精品久久久久久久久久久久久久 | 午夜精品久久久久久中宇 | 蜜桃一本色道久久综合亚洲精品冫 | 国产瑟瑟视频 | 久久久久久久久久久av | 狠狠婷婷综合久久久久久妖精 | 日本在线视频免费观看 | 国产精品性夜天天视频 | 欧美日本亚洲视频 | 亚洲第一视频在线 | 91 在线免费观看 | 久久亚洲精品国产 | 精品视频一区二区三区四区 | 欧美重口另类videos人妖 | 99亚洲伊人久久精品影院红桃 |