資料結構 LDP最大回文子串行

2021-08-15 18:59:43 字數 1428 閱讀 1407

這是乙個典型的dp動態規劃解決的問題

#include 

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

static

const

string a = "abasdfggfdsafgdba";

static

const

int lena = a.length();

//遞迴求解

int byrecursion(int i, int j)

}int bydplps()

for (int i = 0; ifor (int j = 0; j1 : 0;

flag[i][j] = 0;}}

//其實思路和最大公共子串行是一樣的,不一樣的是下面迴圈的設計

//cal[i][j]表示從i到j的子串行是否是回文字串

//cal[i][j]=cal[i+1][j-1]+2; 表明i是一來後面的元素i+1,所以i要倒序

//j是依賴前面的元素,所以要順序遍歷

for (int i = lena - 1; i >= 0; i--)

else

if (cal[i + 1][j] > cal[i][j - 1])

else}}

int maxlen = cal[0][lena - 1];

char* res = new

char[maxlen + 1];

res[maxlen] = '\0';

int k = maxlen - 1;

int h = 0;

int i = 0, j = lena - 1;

while (h <= k)

else

if (flag[i][j] == 2)

i++;

else

j--;

}cout

<< "lps is following:"

<< endl << res << endl;

for (int i = 0; idelete cal[i], flag[i];

delete cal, flag, res;

return maxlen;

}int main()

最大回文子串行 最大回文子串

最大回文子串行,例如cafgfkc,最大回文子串行cfgfc,輸出5。子串行相當於刪除某些位置上的字元後形成的序列。最大回文子串,例如cafgfkc,最大回文子串fgf,輸出3。子串相當於擷取start位到end位的子串。試過沒認真看題目,原題是求子序列,想當然以為求子串,直接高高興興用manach...

最大回文子串行數

time limit 1000ms memory limit 65536k description 給定字串,求它的回文子串行個數。回文子串行反轉字元順序後仍然與原序列相同。例如字串aba中,回文子串行為 a a aa b aba 共5個。內容相同位置不同的子串行算不同的子串行。input 第一行乙...

動態規劃解最大回文子串行

子串和子串行有區別,子串是連續的,子串行不一定連續。例如字串 bdsdksldjfkdls 它的乙個子串為 dsdk 它的乙個子串行為 bdklj 1,2,5,7,9 一 刻畫最優解的結構特徵 假設序列為a,從a i 到a j 所包含的最大回文子串行的字元數為c i,j 則所求的就是c i,j 第一...