• LeetCode 1745. 回文串分割 IV dp


    地址  https://leetcode-cn.com/problems/palindrome-partitioning-iv/

    给你一个字符串 s ,如果可以将它分割成三个 非空 回文子字符串,那么返回 true ,否则返回 false 。
    当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。
    
    
    示例 1:
    输入:s = "abcbdd"
    输出:true
    解释:"abcbdd" = "a" + "bcb" + "dd",三个子字符串都是回文的。
    示例
    2: 输入:s = "bcbddxy" 输出:false 解释:s 没办法被分割成 3 个回文子字符串。   提示: 3 <= s.length <= 2000 s​​​​​​ 只包含小写英文字母。

    算法1
    先看同一系列的 回文串分割
    我们可以使用dp[i][j] 表示字符串i到j的子字符串是否是回文。
    那么状态转移方程 如图

    然后包里遍历分割点 point1 point2 ,将字符串分成三段,直接检测DP判断三段字符串是否是回文

    class Solution {
    public:
        vector<vector<int>> dp;
        void initDp(const string& s)
        {
          //计算dp[i][j] 字符串s的i到j的子字符串是否是回文
            dp = vector<vector<int>>(s.size() + 10, vector<int>(s.size() + 10));
            for (int i = 0; i < s.size(); i++) { dp[i][i] = 1; }
            for (int i = 0; i < s.size() - 1; i++) {
                int l = i - 1; int r = i + 1;
                while (l >= 0 && r < s.size() && s[l] == s[r]) {
                    dp[l][r] = 1;  l--; r++;
                }
                l = i - 1; r = i + 2;
                if (s[i] == s[i + 1]) dp[i][i + 1] = 1;
                while (l >= 0 && r < s.size() && s[l] == s[r] && s[i] == s[i + 1]) {
                    dp[i][i + 1] = 1;
                    dp[l][r] = 1; l--; r++;
                }
            }
        }
    
        bool checkPartitioning(string s) {
            initDp(s);
    
            for(int i = 0; i < s.size();i++){
                for(int j = i+1;j<s.size();j++){
                    if(dp[0][i] && dp[i+1][j] && dp[j+1][s.size()-1]) return true;
                }
            }
    
            return false;
        }
    };

    我的视频题解空间

    作 者: itdef
    欢迎转帖 请保持文本完整并注明出处
    技术博客 http://www.cnblogs.com/itdef/
    B站算法视频题解
    https://space.bilibili.com/18508846
    qq 151435887
    gitee https://gitee.com/def/
    欢迎c c++ 算法爱好者 windows驱动爱好者 服务器程序员沟通交流
    如果觉得不错,欢迎点赞,你的鼓励就是我的动力
    阿里打赏 微信打赏
  • 相关阅读:
    RequireJS 模块化加载框架使用
    MySQL数据类型(最大值 和 最小值)
    utf-8的中文是一个字符占几个字节
    spring的事务是什么?与数据库的事务是否一样
    事务和锁机制是什么关系? 开启事务就自动加锁了吗?
    关于数据库主键和外键
    浅谈Mysql共享锁、排他锁、悲观锁、乐观锁及其使用场景
    TCP/IP协议
    分库分表分区需要考虑的问题及方案
    Redis(十一):Redis的事务功能详解
  • 原文地址:https://www.cnblogs.com/itdef/p/14356987.html
Copyright © 2020-2023  润新知