求字串中兩個長度最長且相等的子串

2021-06-21 15:31:21 字數 1320 閱讀 6583

方法一: 動態規劃dp[i][j] 表示以i結尾和以j結尾的字串最長長度是多少

方法二:利用 extend kmp,利用首字母在不同位置時的next陣列,找出最長長度。。。

my summary:

s[a,p-1] = t[0, p-a-1]   -> s[i,p-1]=t[i-a, p-a-1]

t[i-a, next[i-a]+i-a-1] = t[0, next[i-a]-1]

so if next[i-a]+i-a-1 >= p-a-1, extend j,p, extend[i]=j

else extend[i]=next[i-a]

my code:

void getnextarr(const char *t, vector& nextarr) 

else

}} void getextendarr(const char *s, const char *t, vector& extend)

else

}}

debug code:

#include #include #include using namespace std;

class solution

else

}} void getextend(const char *s, const char *t, int *extend)

else extend[i] = next[i - a];

} void getnextarr(const char *t, vector& nextarr)

else

}} void getextendarr(const char *s, const char *t, vector& extend)

else

}} char *strstr(char *haystack, char *needle)

else

j = next[j];

}i = 0;

j = 0;

while (haystack[i])

else

j = next[j];

}return null;

}};int main()

字串中相同且長度最長的字串

題目出自 程式設計師面試寶典 第三版 p226頁 面試例題2 輸入一行字串,找出其中出現的相同且長度最長的字串,輸出它及首字元的位置。例如 yyabcdabjcabceg 輸出結果應該為abc和3。這個題目存在乙個歧義,例如如果測試字串為aaaaaa,我一開始以為結果是長度為3的aaa,原來正確答案...

求字串中滿足所有字元個數相等的最長子串長度

乙個字串,只包含a,b,c三種字母,比如aabbbcbcaaa,找出乙個最長子串,要求包含的三種字母個數相同,返回最長子串的長度即可。比如串aabbbcbcaaa的最長子串是bcbcaa,包含a,b,c都是2個。實現下面c 函式 下面是一種o n 的實現方法。int getmaxlen string...

求字串中最長回文串的長度

給出乙個只由小寫英文本元a,b,c y,z組成的字串s,求s中最長回文串的長度.回文就是正反讀都是一樣的字串,如aba,abba等 input 輸入有多組case,不超過120組,每組輸入為一行小寫英文本元a,b,c y,z組成的字串s 兩組case之間由空行隔開 該空行不用處理 字串長度len 1...