題目大意:
計算兩個字串的最長的公共字串字串的長度。
思路分析:
將兩個串合併起來。
然後直接跑字尾陣列求出height
然後就可以直接掃瞄一次height ,加個是不是在乙個串中的判斷就可以了。
#include #include #include #include #define maxn 200005
using namespace std;
char str[maxn];
int sa[maxn],t1[maxn],t2[maxn],c[maxn],n;
void suffix(int m)
}int rank[maxn],height[maxn];
void getheight()
return false;
}int bin()
else r=mid-1;
}return ans;
}char tmp[11111];
int main()
{ int t;
scanf("%d",&t);
getchar();
while(t--)
{gets(tmp);
int len=strlen(tmp);
int top=0;
for(int i=0;i<=len;i++)
str[top++]=tmp[i];
gets(tmp);
int cnt=0;
while(tmp[cnt]!='\0')str[top++]=tmp[cnt++];
n=top;
suffix(256);
getheight();
int ans=0;
for(int i=1;i
字尾陣列 POJ 2217 Secretary
題目鏈結 題意 求兩個字串的最長公共子串 分析 做法是構造新的串是兩個串連線而成,中間用沒有出現的字元隔開 因為這樣才能保證s的字尾的公共字首不會跨出乙個原有串的範圍 即news s t。對其求sa陣列和height陣列,取最小值的height i 且兩個字尾串屬於不同的字串。include inc...
POJ 2217 字尾陣列 最長公共子串
題目鏈結 題目大意 求兩個串的最長公共子串,注意子串是連續的,而子串行可以不連續。解題思路 字尾陣列解法是這類問題的模板解法。對於n個串的最長公共子串,這要把這些串連在一起,中間用 這類的特殊符號分隔一下。先求字尾陣列,再求最長公共字首,取相鄰兩個且屬於不同串的sa的最大lcp即可。原理就是 這樣把...
poj2117求割點後最多的塊。
tarjan演算法,列舉割點 注意此題無向圖可能不連通 每個割點分割後最大塊數 連通分量 1即可。開始老是tle,後來比較了他人 只在vector.用全域性變數即可,用區域性tle。記住教訓。include 600 ms 5000ms include include 用這個做鍊錶,儲存邊,方便。in...