給你 2 個字串(可能包括數字以及標點),長度不超過 50124,請你求出最長的連續的公共子串行。
不知道是不是資料改了,導致這個似乎是n^2的演算法也能暴力過去:
#include
using
namespace
std;
int main()
}maxl = max(maxl, len);
}printf("%d\n", maxl);
return
0;}
不過僅僅滿足於暴力還是不行的……這裡考慮到資料太大,採用了字尾陣列+高度陣列的辦法。不知道雜湊是不是也可以?
順帶一提,string的size()方法返回unsigned int……轉成int後好像會-1,被坑慘了。
#include
using
namespace
std;
const
int maxn = 100200;
int n, k, ans;
string s, t;
int sa[maxn], rk[maxn], tmp[maxn], lcp[maxn];
bool cmp(int i, int j)
void construct_sa()
for (k = 1; k <= n; k <<= 1)
}void construct_lcp()
}int main()
EOJ 3194 字串消除
給定乙個由大寫字母 a b c 構成的字串s,按如下進行消除過程 1 字串s中連續相同字母組成的子串,如果子串的長度大於1,那麼這些子串會被同時消除,餘下的字元拼成新的字串。例如 abccbcccaa 中 cc ccc 和 aa 會被同時消除,餘下 ab 和 b 拼成新的字串 abb 2 反覆進行上...
201409 3 字串匹配
試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小...
20140903 字串匹配
問題描述 試題編號 201409 3 試題名稱 字串匹配 時間限制 1.0s 記憶體限制 256.0mb 問題描述 問題描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母...