給定乙個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 ...