亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? suffarray_c.cpp

?? 后綴數組求最長公共子串 這里的最長公共子串是指的連續的子串
?? CPP
字號:
這里的最長公共子串是指的連續的子串,并非經典dp的那種。

aabbc

abc

這兩個字符串的最長公共子串為ab

算法復雜度是o(n)的(n為兩個字符串長度的和)

#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
const int maxn=210000;
char s[maxn];
int len,k;
int sa[maxn],rank[maxn],h[maxn],height[maxn];
int num[maxn];
inline bool leq(int a1, int a2, int b1, int b2)
{
	return (a1 < b1 || a1 == b1 && a2 <= b2);
}

inline bool leq(int a1, int a2, int a3, int b1, int b2, int b3)
{
	return(a1 < b1 || a1 == b1 && leq(a2, a3, b2, b3));
}

static void radixPass(int* a, int* b, int* r, int n, int K)
{
	int* c = new int[K + 1];
	for(int i = 0; i <= K; i++) c[i] = 0;
	for(int i = 0; i < n; i++) c[r[a[i]]]++;
	for(int i = 0, sum = 0; i <= K; i++)
	{
		int t = c[i]; c[i] = sum; sum += t;
	}
	for(int i = 0; i < n; i++) b[c[r[a[i]]]++] = a[i];
	delete [] c;
}

void suffixArray(int* T, int* SA, int n, int K)
{
	int n0 = (n + 2) / 3, n1 = (n + 1) / 3, n2 = n / 3, n02 = n0 + n2;
	int* R = new int[n02 + 3]; R[n02] = R[n02+1] = R[n02 + 2] = 0;
	int* SA12 = new int[n02 + 3]; SA12[n02] = SA12[n02 + 1] = SA12[n02 + 2] = 0;
	int* R0 = new int[n0];
	int* SA0 = new int[n0];
	for(int i = 0, j = 0; i < n + (n0 - n1); i++) if(i % 3 != 0) R[j++] = i;
	radixPass(R , SA12, T + 2, n02, K);
	radixPass(SA12, R , T + 1, n02, K);
	radixPass(R , SA12, T , n02, K);
	int name = 0, c0 = -1, c1 = -1, c2 = -1;
	for(int i = 0; i < n02; i++)
	{
		if(T[SA12[i]] != c0 || T[SA12[i] + 1] != c1 || T[SA12[i] + 2] != c2)
		{
			name++; c0 = T[SA12[i]]; c1 = T[SA12[i] + 1]; c2 = T[SA12[i] + 2];
		}
		if(SA12[i] % 3 == 1) { R[SA12[i] / 3] = name; }
		else{ R[SA12[i] / 3 + n0] = name; }
	}
	if(name < n02)
	{
		suffixArray(R, SA12, n02, name);
		for(int i = 0; i < n02; i++) R[SA12[i]] = i + 1;
	}
	else
		for(int i = 0; i < n02; i++) SA12[R[i] - 1] = i;
	for(int i = 0, j = 0; i < n02; i++) if(SA12[i] < n0) R0[j++] = 3 * SA12[i];
	radixPass(R0, SA0, T, n0, K);
	for(int p = 0, t = n0 - n1, k = 0; k < n; k++)
	{
		#define GetI() (SA12[t] < n0 ? SA12[t] * 3 + 1 : (SA12[t] - n0) * 3 + 2)
		int i = GetI();
		int j = SA0[p];
		if(SA12[t] < n0 ?
		leq(T[i], R[SA12[t] + n0], T[j], R[j / 3]) : leq(T[i],T[i + 1],R[SA12[t] - n0 + 1], T[j],T[j + 1],R[j / 3 + n0]))
		{
			SA[k] = i; t++;
			if(t == n02)
				for(k++; p < n0; p++, k++) SA[k] = SA0[p];
		}
		else{
			SA[k] = j;
			if(++p == n0)for(k++; t < n02; t++, k++) SA[k] = GetI();
		}
	}
	delete [] R; delete [] SA12; delete [] SA0; delete [] R0;
}

int main(){

 int i,n,a,b,j;

 scanf("%s",s+1);
 n=strlen(s+1);
 s[++n]='A'-1;
 scanf("%s",s+n+1);
 len=strlen(s+1);
 for(i=1;i<=len;i++)num[i]=s[i]-'A'+1;
 suffixArray(&num[1], &sa[1], len, 60);
 for(i=1;i<=len;i++)rank[++sa[i]]=i;
  for(i=1;i<=len;i++){
  a=i;b=sa[rank[i]-1];
  if(rank[i]==1)h[i]=0;
  else
  if(i==1||h[i-1]<=1){
   for(j=0;;j++)if(s[a+j]!=s[b+j])break;
   h[i]=j;
  }
  else{
   for(j=h[i-1]-1;;j++)if(s[a+j]!=s[b+j])break;
   h[i]=j;
  }
 }
  for(i=1;i<=len;i++)height[i]=h[sa[i]];
  int ans=0;
   for(i=2;i<=len;i++){
 	if(sa[i]<n&&sa[i-1]>n||sa[i]>n&&sa[i-1]<n)
 		if(height[i]>ans)ans=height[i];
 }
  printf("%d\n",ans);

 return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
91精品婷婷国产综合久久竹菊| 亚洲国产成人高清精品| 美女一区二区视频| 日韩一区二区三区免费观看| 午夜在线成人av| 欧美美女一区二区| 日韩一区精品视频| 精品少妇一区二区三区视频免付费| 日本中文在线一区| 久久这里只有精品6| 高清在线不卡av| 自拍偷拍亚洲激情| 欧美日韩在线精品一区二区三区激情| 天使萌一区二区三区免费观看| 6080yy午夜一二三区久久| 日韩电影在线免费观看| 日韩午夜在线播放| 国产白丝精品91爽爽久久| 亚洲日本在线a| 91精品久久久久久久91蜜桃| 久久99国内精品| 国产精品视频九色porn| 91美女片黄在线观看| 偷拍自拍另类欧美| 久久美女高清视频 | 午夜激情综合网| 欧美成人乱码一区二区三区| eeuss国产一区二区三区| 亚洲一区中文日韩| 精品日本一线二线三线不卡| 成人白浆超碰人人人人| 日韩高清在线一区| 亚洲国产激情av| 欧美猛男男办公室激情| 国产成人精品网址| 亚洲成人av电影| 欧美国产精品v| 91麻豆精品国产91久久久久久| 国产成人免费在线视频| 午夜精品免费在线观看| 久久久电影一区二区三区| 欧美影视一区在线| 国产福利精品导航| 日韩精品电影在线| 亚洲精品中文在线| 久久久国产综合精品女国产盗摄| 91福利资源站| 成人av免费在线播放| 日本女人一区二区三区| 夜夜亚洲天天久久| 国产拍揄自揄精品视频麻豆| 91精品国产综合久久久蜜臀粉嫩 | 国产成+人+日韩+欧美+亚洲| 亚洲第四色夜色| 亚洲素人一区二区| 国产喂奶挤奶一区二区三区| 91精品国产综合久久久久久久久久| 成人免费视频caoporn| 狠狠色丁香婷综合久久| 日日夜夜精品视频免费| 亚洲综合偷拍欧美一区色| 国产精品久久久久婷婷| 久久精品欧美一区二区三区麻豆| 91精品国产综合久久精品app| 91在线视频播放地址| 国产精品资源在线看| 青青青伊人色综合久久| 午夜精品aaa| 亚洲成人在线观看视频| 一区二区三区在线免费视频| 国产精品久久久久久久久免费桃花| 精品国产精品一区二区夜夜嗨| 欧美人xxxx| 欧美三级韩国三级日本一级| 91麻豆福利精品推荐| 91免费版在线| 99re热这里只有精品视频| 成人一级视频在线观看| 成人av在线观| 成人性生交大合| 波多野结衣中文一区| 国产91丝袜在线18| 成人激情视频网站| 成人激情校园春色| 91无套直看片红桃| 91女厕偷拍女厕偷拍高清| 91美女在线视频| 欧美在线一区二区| 欧美二区三区91| 日韩亚洲欧美综合| 欧美mv和日韩mv的网站| 精品日韩99亚洲| 国产日韩欧美不卡| 亚洲视频在线观看一区| 亚洲精品中文在线| 午夜精品久久久久久| 青青草伊人久久| 国产专区综合网| 高清不卡一二三区| 91热门视频在线观看| 精品视频在线视频| 精品少妇一区二区三区视频免付费| 久久蜜臀中文字幕| 中国av一区二区三区| 亚洲日本中文字幕区| 视频一区视频二区中文| 激情久久久久久久久久久久久久久久| 国产一区二区三区最好精华液| 成人三级在线视频| 欧美在线你懂得| 精品奇米国产一区二区三区| 国产女人18毛片水真多成人如厕| 日韩理论在线观看| 亚洲大型综合色站| 国产剧情在线观看一区二区| 成人av电影在线播放| 欧美老女人在线| 久久精品视频免费| 亚洲欧美日韩国产综合在线| 日韩精品一二三四| 国产成人精品三级| 欧美日韩国产乱码电影| 精品国产成人系列| 依依成人综合视频| 国产一区二区三区四区五区美女| zzijzzij亚洲日本少妇熟睡| 欧美精品xxxxbbbb| 国产日韩精品久久久| 丝袜美腿亚洲一区| 波多野结衣中文字幕一区二区三区| 欧美另类高清zo欧美| 国产精品视频你懂的| 人妖欧美一区二区| 91黄视频在线| 久久久午夜精品| 天涯成人国产亚洲精品一区av| 国产成人啪免费观看软件 | 91精品国产综合久久香蕉麻豆 | 麻豆精品视频在线观看| 一本久久a久久免费精品不卡| 精品久久国产97色综合| 亚洲综合av网| 成人avav在线| 欧美精品一区二区三| 亚洲综合小说图片| 白白色亚洲国产精品| 久久久久免费观看| 久久精品av麻豆的观看方式| 色婷婷综合五月| 国产精品私人影院| 国产一区二区三区高清播放| 91精品国产综合久久久蜜臀粉嫩| 亚洲黄色免费电影| 不卡高清视频专区| 国产蜜臀av在线一区二区三区| 日韩黄色免费电影| 欧美日韩免费一区二区三区视频| 中日韩av电影| 成人做爰69片免费看网站| 精品国产乱码久久久久久图片| 日本欧美在线观看| 制服丝袜亚洲精品中文字幕| 一区二区三区美女| 91高清在线观看| 亚洲黄色录像片| 91麻豆免费看片| 中文字幕一区二区三| 成人黄色国产精品网站大全在线免费观看 | 亚洲激情男女视频| 91亚洲国产成人精品一区二区三| 欧美经典一区二区三区| 国产一区视频在线看| 久久久蜜臀国产一区二区| 狠狠色综合播放一区二区| 久久新电视剧免费观看| 国产一区二区精品在线观看| 久久亚洲春色中文字幕久久久| 激情都市一区二区| 国产情人综合久久777777| 国产成人福利片| 国产精品日韩成人| 99国产精品99久久久久久| 亚洲免费视频中文字幕| 在线观看精品一区| 亚洲一二三四在线观看| 在线综合视频播放| 久久国产精品免费| 日本一区二区在线不卡| 91蜜桃传媒精品久久久一区二区| 亚洲精品第一国产综合野| 欧美三级一区二区| 裸体健美xxxx欧美裸体表演| 欧美变态tickle挠乳网站| 国产高清在线精品| 亚洲天堂网中文字| 91 com成人网| 国产一区二区三区最好精华液| 国产精品传媒视频| 91麻豆精品国产91久久久使用方法| 紧缚奴在线一区二区三区|