zoukankan      html  css  js  c++  java
  • LeetCode 132. 分割回文串 II(Palindrome Partitioning II)

    题目描述

    给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。

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

    示例:

    输入: "aab"
    输出: 1
    解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

    解题思路

    动态规划思想。从最后一个字符开始向前遍历,每次判断以当前字符为首字母依次到最后字符的子字符串是否为回文串,若是则更新包含当前回文串的最小回文串数。具体想法可参考leetcode之 Palindrome Partitioning I&II

    代码

     1 class Solution {
     2 public:
     3     int minCut(string s) {
     4         vector<vector<int>> dp(s.length(), vector<int>(s.length(), 0));
     5         vector<int> cnt(s.length() + 1, 0);
     6         for(int i = s.length() - 1; i >= 0; i--){
     7             cnt[i] = INT_MAX;
     8             for(int j = i; j < s.length(); j++){
     9                 if(s[i] == s[j] && (j - i <= 2 || dp[i + 1][j - 1])){
    10                     dp[i][j] = 1;
    11                     cnt[i] = min(cnt[i], cnt[j + 1] + 1);
    12                 }
    13             }
    14         }
    15         return cnt[0] - 1;
    16     }
    17 };
  • 相关阅读:
    abstract关键字
    方法重写
    对象初始化过程
    访问修饰符
    super关键字
    继承
    转发和重定向的区别
    tomcat中乱码问题解决
    jsp执行过程
    web程序常见错误及解决方法
  • 原文地址:https://www.cnblogs.com/wmx24/p/9885385.html
Copyright © 2011-2022 走看看