1.最长回文子串
2.
前言
动态规划回文串系列一直是我的一个痛点,今天上午看了书,本以为已经完全看懂了,结果下午闭书敲代码,敲了一下午还没有搞定,哎,果然代码不是靠看懂的,中间思考过程的艰深,只有敲过了代码才能感受到.
思路
dp五部曲:
1)确定dp[i][j]含义,这一步最重要,也是最难抉择的,为什么说最难抉择呢?到底dp[i][j]表示以下标[i,j]的字符串还是下标[i+1][j-1]的字符串呢?还是下标[i-1][j-1]的字符串呢?我们选择下标[i][j]的字符串含义,因为这样方便后续处理
2)递推公式:
第一题:
if(s[i]==s[j]) dp[i][j]=dp[i+1][j-1]+2,否则dp[i][j]=max(dp[i+1][j],dp[i][j+1]) //表示选择更长的序列
第二题:
if(s[i]==s[j]) 三种情况讨论:
①.i=&