动态规划的方法判断字符串是否为回文串
先找状态
假如状态 F(i) : 前i个字符是否为回文串
那么F(i-1)表示前i-1个字符串为回文串, F[i]要和F[0]比较,那么此时就无法进行比较
我们需要往小区间转换,所以一维的解决不了问题
状态F(i,j):区间(i,j)是否为回文串
F(i,j)转移方程:
- s[i] == s[j] && (i+1,j-1) 是否为回文串 。 也就是 s[i] == s[j] && F(i+1,j-1)
- 两个字符的情况: F(i,j) i+1==j 双字符区间:也就是 s[i] ==s[j]
初始化: 区间(i,i): 单字符 : F(i,i) = true
返回: F(0,s.size() - 1)
那么我们要知道更新的时候 怎么更新 ?
更新第i行的值 要用到 i+1 行的值。所以要从下往上更新,从最后一行的值
代码如下
vector<vector<bool>> palMat(string s)
{
int row = s.size();
vector<vector<bool>> Mat(row, vector<bool>(row, false));
for (int i = row - 1; i >= 0; i--)
{
for (int j = i; j < row; ++j)
{
//F(i,j) = true;
if (i ==<