动态规划 去掉字符变成回文串方案数量

51 阅读1分钟

题目

image.png

  • 范围上尝试模型,对[i,j]范围上进行可能性分析,分为四种情况

    • 以i开头,不以j结尾,a
    • 不以i开头,以j结尾,b
    • 不以i开头、不以j结尾,c
    • 以i开头、j结尾,d
  • dp[i][j]表示[i,j]范围上的数量,则最终方案数量为 a+b+c+d

    • dp[i-1][j]表示[i-1,j]范围上的数量,而[i-1,j]范围内的可能对应上面的情况为b+c
    • dp[i][j-1]表示[i,j-1]范围上的数量[i,j-1]范围内的可能对应上面的情况为a+c
    • 所以 dp[i][j-1]=dp[i-1][j]+dp[i,j-1]-dp[i-1][j-1]
    • 当 str[i]===str[j]时,dp[i][j-1]的可能还需要加上dp[i-1][j-1]+1,1表示[i-1,j-1]范围情况为0时,str[i]str[j]本身就能构成一种结果
  • 最终dp表填写完对角线和对角线右边的斜线后,通过dp关系填完整张表