方法一: 動態規劃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...