多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > HDU 1403 Longest Common Substring(后綴數組啊 求最長公共子串 模板題)

HDU 1403 Longest Common Substring(后綴數組啊 求最長公共子串 模板題)

來源:程序員人生   發布時間:2015-09-07 08:20:34 閱讀次數:4092次

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=1403


Problem Description
Given two strings, you have to tell the length of the Longest Common Substring of them.

For example:
str1 = banana
str2 = cianaic

So the Longest Common Substring is "ana", and the length is 3.
 
Input
The input contains several test cases. Each test case contains two strings, each string will have at most 100000 characters. All the characters are in lower-case.

Process to the end of file.
 
Output
For each test case, you have to tell the length of the Longest Common Substring of them.
 
Sample Input
banana cianaic
 
Sample Output
3


題意:

求兩個字符串的最長公共子串長度!

代碼以下:

#include <cstdio> #include <cstring> const int N = 100017*2; int wa[N], wb[N], wv[N], ws[N]; int rank[N]; //名次數組 int height[N]; //排名相鄰的兩個后綴的最長公共前綴 char str[N]; int s[N], sa[N]; //sa為后綴數組,n個后綴從小到大進行排序以后把排好序的后綴的開頭位置 int Max(int a, int b) { return a > b ? a:b; } int Min(int a, int b) { return a < b ? a:b; } int cmp(int *r, int a, int b, int l) { return r[a]==r[b] && r[a+l]==r[b+l]; } //get_sa函數的參數n代表字符串中字符的個數,這里的n里面是包括人為在字符串末尾添加的那個0的 //get_sa函數的參數m代表字符串中字符的取值范圍,是基數排序的1個參數, //如果原序列都是字母可以直接取128, //如果原序列本身都是整數的話,則m可以取比最大的整數大1的值。 void get_sa(int *r, int *sa, int n, int m) //倍增算法 { int i,j,p,*x=wa,*y=wb,*t; for(i=0; i<m; i++) ws[i]=0; for(i=0; i<n; i++) ws[x[i]=r[i]]++; for(i=1; i<m; i++) ws[i]+=ws[i⑴]; for(i=n⑴; i>=0; i--) sa[--ws[x[i]]]=i; //對長度為1的字符串排序 for(p=1,j=1; p<n; j*=2,m=p) { for(p=0,i=n-j; i<n; i++) y[p++]=i; for(i=0; i<n; i++) if(sa[i]>=j) y[p++]=sa[i]-j; //第2關鍵字排序結果 for(i=0; i<n; i++) wv[i]=x[y[i]]; for(i=0; i<m; i++) ws[i]=0; for(i=0; i<n; i++) ws[wv[i]]++; for(i=1; i<m; i++) ws[i]+=ws[i⑴]; for(i=n⑴; i>=0; i--) sa[--ws[wv[i]]]=y[i]; //第1關鍵字排序 for(t=x,x=y,y=t,p=1,x[sa[0]]=0,i=1; i<n; i++) x[sa[i]]=cmp(y,sa[i⑴],sa[i],j)?p⑴:p++; //更新rank數組 } return; } void get_height(int *r, int *sa, int n) //求height數組 { int i, j, k=0; for(i=1; i<=n; i++) rank[sa[i]]=i; for(i=0; i<n; height[rank[i++]]=k) for(k?k--:0,j=sa[rank[i]⑴]; r[i+k]==r[j+k]; k++); return; } int main() { while(~scanf("%s",str)) { int len = strlen(str); str[len] = '~'; scanf("%s",str+len+1); int LEN = strlen(str); for(int i = 0; i < LEN; i++) { s[i] = str[i]-'a'+1; } s[LEN] = 0; get_sa(s,sa,LEN,270); get_height(s,sa,LEN); int ans = 0; for(int i = 2; i < LEN; i++) { if(height[i] > ans) { if((sa[i⑴]<len&&sa[i]>len) || (sa[i⑴]>len&&sa[i]<len)) ans = height[i]; } } printf("%d ",ans); } return 0; }


生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: ppypp日本欧美一区二区 | 国产欧美日韩在线观看一区二区三区 | 国产成人综合久久精品亚洲 | 国产成人久久久精品毛片 | 欧美精品一区二区三区免费播放 | 日韩成人国产精品视频 | 一级一级 a爱片免费视频 | 欧美性猛交乱大交xxxx | 成人精品一区二区久久久 | 18videosex性欧美69免费播放 | 欧美激情区 | 超级黄色毛片 | 九色综合网 | 在线中文字幕亚洲 | 小毛片网站 | 欧美成人综合 | 精品亚洲欧美高清不卡高清 | 真实男女xx00动态视频120秒 | 色自拍偷拍 | 一区二区三区欧美 | 永久免费视频网站在线观看 | 亚洲综合区图片小说区 | 久久精品国产一区二区三区不卡 | 噜噜网站 | 国产视频欧美 | 午夜福免费福利在线观看 | 亚洲免费a | 日韩一级欧美一级毛片在线 | 岛国午夜 | 国内精品久久久久影院网站 | 成年人在线视频网站 | 视频在线高清完整免费观看 | 日韩亚洲欧美一区二区三区 | 波多野野结衣1区二区 | 成 人 亚洲 综合天堂 | 免费在线视频一区 | 亚洲人成综合网站在线 | 美女视频h | 韩国三级午夜理伦三级99 | 高清在线精品一区二区 | 国产精品欧美亚洲区 |