平方串 最大子串行問題

2021-09-19 16:14:53 字數 1145 閱讀 3256

題目描述

如果乙個字串s是由兩個字串t連線而成,即s = t + t, 我們就稱s叫做平方串,例如"",「aabaab」,"***x"都是平方串.

牛牛現在有乙個字串s,請你幫助牛牛從s中移除盡量少的字元,讓剩下的字串是乙個平方串。換句話說,就是找出s的最長子序列並且這個子串行構成乙個平方串。

輸入描述:

輸入乙個字串s,字串長度length(1 ≤ length ≤ 50),字串只包括小寫字元。

輸出描述:

輸出乙個正整數,即滿足要求的平方串的長度。

求解思路

動態規劃(dp)

這個問題其實就是乙個求解最大子串的問題。可以依次把字串分為兩個子串,求解兩個子串間的最大子串,最大子串的長度乘以2即為最後結果。

最大子串的求解可以按照以下遞推公式進行求解

c [i

,j]=

& j = 0 } \\ & x _ = y _ } \\ & x _ \neq y _ } \end \right.

c[i,j]

=⎩⎨⎧

​0c[

i−1,

j−1]

+1max(c[

i,j−

1],c

[i−1

,j])

​i=0

or j=0

i,j>

0and xi

​=yj

​i,j

>

0and xi

​̸​=

yj​​

對於如何求解最大子串問題,個人認為部落格講的很清楚,可以借鑑。

**實現

#include"iostream"

#include"vector"

#include"string"

using namespace std;

int lcs(string s1, string s2)

return dp[l1][l2];

}int main()

cout

}

最大子串行問題

問題描述 輸入一組整數,求出這組數字子串行和中最大值。也就是只要求出最大子串行的和,不必求出最大的那個序列。例如 序列 2 11 4 13 5 2,則最大子串行和為20。複雜度為o n 2 的演算法 include include int maxsubseqsum const int a,int n...

最大子串行問題

現在我們將敘述兩個演算法來求解最大子串行和問題 include int maxsubsequencesum int a,int n int main printf max d maxsubsequencesum a,15 return0 int maxsubsequencesum int a 15 ...

最大子串行問題

題目 給定乙個整數列 可能有負數 求該整數列每個子串行的和的最大值,如果都為負數則結果為0 例如 對於輸入 2,11,4,13,5,2 答案為20 從11 到 13,即就是 11 4 13 20 粗略 如下 已測試通過 include using namespace std arr 目標陣列,len...