阿里2015 研發筆試 求最長公共子串

2021-06-25 07:38:57 字數 1318 閱讀 2436

給定乙個query和乙個text,均由小寫字母組成。要求在text中找出以同樣的順序連續出現在query中的最長連續字母序列的長度。例如, query為「acbac」,text為「acaccbabb」,那麼text中的「cba」為最長的連續出現在query中的字母序列,因此,返回結果應該為其長度3。請注意程式效率。

一、kmp實現:我是將每乙個query的字尾都生成了乙個字尾函式,不得不說這樣太複雜了,我自己都不想再看到這種方法。如果text長度為m,query長度為n的話,預處理時間複雜度為o(m^2),匹配時間複雜度為o(mn)。

#include #include #include using namespace std;

int **prefixfunc(char *query);

int kmp(char *test, char *query)

int tlen = strlen(test);

int qlen = strlen(query);

int **prefix;

prefix = prefixfunc(query);

for (int i = 0; i < qlen; i++)

if (query[q[j] + j + 1] == test[i])

if (q[j] == qlen - j - 1)

if (q[j] > maxstringlen[j])

} }int maxlen = maxstringlen[0];

for (int i = 0; i < qlen; i++)

for (int i = 0; i < qlen; i++)

delete prefix;

return maxlen + 1;

}int **prefixfunc(char *query)

int len = strlen(query);

int **pre = new int* [len];

for (int i = 0; i < len; i++)

if (pre == null)

for (int i = 0; i < len; i++)

int q;

int k;

for (int i = 0; i < len; i++)

if (query[k + 1] == query[q])

pre[i][q - i] = k;

} } return pre;

}int main()

{ char *test = "acaccbacbb";

char *query = "acbac";

cout<<"max len is"<

騰訊2015研發筆試大題

1.遞迴實現格雷碼 感覺這道題完全是考察對格雷碼規律熟悉程度。如果能夠能夠比較清楚的知道這點,實現比較簡單。具體格雷碼如下 1位格雷碼 0 1 2位格雷碼 00 01 11 10 3位格雷碼 000 001 011 010 110 111 101 100 4位格雷碼 0000 0001 0011 0...

人人網2015研發筆試卷

1.計算機中處理乘法的指令要比加法複雜的多,因為在一些關鍵系統中我們常常會考慮如何盡可能減少乘法的運算。現在有如下的表示式y anxn an 1xn 1 a1x a0,其中an,an 1,a1,a0是常數,給乙個x,要求盡快算出y的值。請嘗試寫出這樣的乙個函式。2.給出二叉樹介面為 class no...

2015有道實習生研發筆試

回憶版 有些題記不清了 基礎題 1 下一段 輸出什麼 int a 5 int b int a 1 cout a 1 b 1 return 0 2 巨集 define fuc a a a int x 5 x func x cout 求輸出的值是多少 3 中序遍歷為abcde,前序遍歷不可能為什麼 4 ...