力扣题解(分割回文串II)

132. 分割回文串 II

给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是

回文串

返回符合要求的 最少分割次数 

思路:

规定dp[i]是以i位置为最后一个元素,(0-i)的最少分割次数,此时需要从(0-i-1)中找出一个j,使得(j,i)是一个回文串,这样的话可以看成实在j位置切了一刀,然后(0-j-1)的最少切割存放在dp[j-1]中,则dp[i]=dp[j-1]+1(加一是在j位置又切了一刀)。

细节:由于j是默认从0位置开始计算的,则当j=0时,即(0,i)本身可以构成一个回文串,而j-1是下标-1,dp中没有下标为-1的元素,因此需要单独说明此时dp[i]=0(因为整体是一个回文串,因此可以一刀不切),如果想和j等于别的值保持一致,则dp需要开辟N+1个空间,第一个空间dp[0]=-1,dp[i]表示已i-1位置元素为最后一个元素切割的最小次数。

class Solution {
public:

   

	bool judge(vector<int>&dp1, vector<int>&dp2, int left, int right)
				{

					if ((right -left+1) % 2 == 0)
						return dp2[(right +left) / 2] >= right - left+1;
					else
						return dp1[(right + left) / 2] >= right - left+1;
                }
					int minCut(string s) {
					int n = s.size();
					vector<int>dpone(n, 1);
					vector<int>dptwo(n, 0);
					for (int i = 0; i < n; i++)
					{
						int j = 1;
						while (i - j >= 0 && i + j < n && s[i - j] == s[i + j])
						{
							dpone[i] += 2;
							j++;
						}
						j = 0;
						while (i - j >= 0 && i + 1 + j < n && s[i - j] == s[i + j + 1])
						{

							dptwo[i] += 2;
							j++;
						}
					}
					vector<int>dp(n, INT_MAX);
					dp[0] = 0;
					for (int i = 1; i < n; i++)
					{
						for (int j = 0; j <= i; j++)
						{

							if (judge(dpone, dptwo, j, i))
							{
								if (j == 0)
									dp[i] = 0;
								else
									dp[i] = min(dp[j-1] + 1, dp[i]);
							}
						}
					}

					return dp.back();
				}
};

相关推荐

  1. 题解分割II

    2024-07-14 10:12:06       23 阅读
  2. [题解]131. 分割

    2024-07-14 10:12:06       29 阅读
  3. 每日OJ题_dp④_132. 分割 II

    2024-07-14 10:12:06       37 阅读
  4. 题解

    2024-07-14 10:12:06       21 阅读
  5. :131. 分割

    2024-07-14 10:12:06       49 阅读
  6. 分割131)

    2024-07-14 10:12:06       24 阅读
  7. :131. 分割

    2024-07-14 10:12:06       28 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-14 10:12:06       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-14 10:12:06       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-14 10:12:06       58 阅读
  4. Python语言-面向对象

    2024-07-14 10:12:06       69 阅读

热门阅读

  1. Linux C++ 054-设计模式之外观模式

    2024-07-14 10:12:06       26 阅读
  2. 大白话【卷积神经网络】工作原理

    2024-07-14 10:12:06       26 阅读
  3. [NOIP2005 普及组] 采药

    2024-07-14 10:12:06       24 阅读
  4. 【Git使用】管理代码

    2024-07-14 10:12:06       21 阅读
  5. 分区和分桶的区别

    2024-07-14 10:12:06       23 阅读
  6. vue vite自动化路由 无需手动配置

    2024-07-14 10:12:06       18 阅读
  7. C#学习

    2024-07-14 10:12:06       27 阅读
  8. 华为生成树协议技术概述

    2024-07-14 10:12:06       26 阅读
  9. 如何使用Gunicorn配置SSL/TLS加密Web服务

    2024-07-14 10:12:06       35 阅读