本文主要是介绍【算法|动态规划No.26】leetcode1745. 分割回文串 IV,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
个人主页:兜里有颗棉花糖
欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创
收录于专栏【手撕算法系列专栏】【LeetCode】
🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程,希望对大家有所帮助
🍓希望我们一起努力、成长,共同进步。
点击直接跳转到该题目
目录
- 1️⃣题目描述
- 2️⃣题目解析
- 3️⃣解题代码
1️⃣题目描述
给你一个字符串 s
,如果可以将它分割成三个 非空 回文子字符串,那么返回 true
,否则返回 false
。
当一个字符串正着读和反着读是一模一样的,就称其为 回文字符串 。
示例1:
输入:s = “abcbdd”
输出:true
解释:“abcbdd” = “a” + “bcb” + “dd”,三个子字符串都是回文的。
示例2:
输入:s = “bcbddxy”
输出:false
解释:s 没办法被分割成 3 个回文子字符串。
注意:
3 <= s.length <= 2000
s 只包含小写英文字母。
2️⃣题目解析
解题思路
:动态规划得到存储每个子串是否是回文串,然后双层循环遍历字符串中所有可能分割出来的3个字串。
关于如何得到存储每个字串是否是回文串的dp表。可以参照下面这篇博客:回文字串(点击直接跳转到该博客)
3️⃣解题代码
class Solution {
public:bool checkPartitioning(string s) {int n = s.size();vector<vector<int>> dp(n,vector<int>(n));for(int i = n - 1;i >= 0;i--){for(int j = i;j < n;j++){if(s[i] == s[j])dp[i][j] = i + 1 < j ? dp[i + 1][j - 1] : true;}}for(int i = 1;i < n - 1;i++)for(int j = 1;j < n -1;j++)if(dp[0][i - 1] && dp[i][j] && dp[j + 1][n - 1])return true;return false;}
};
最后就顺利通过啦!!!
这篇关于【算法|动态规划No.26】leetcode1745. 分割回文串 IV的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!