題目描述
如果乙個字串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...