LeetCode Palindrome Partitioning II
来源:互联网 发布:windows播放器解码器 编辑:程序博客网 时间:2024/06/06 09:16
LeetCode解题之Palindrome Partitioning II
原题
将一个字符串分割成若干个子字符串,使得子字符串都是回文字符串,要求最少需要几次分割能够满足需求。
注意点:
- 无
例子:
输入: s = “aab”
输出: 1 (分为”aa”和”b”)
解题思路
可以通过动态规划解决,dp[i]表示字符串s[:i+1]需要的最少的切割次数,dp[i]的初始值为i,因为长度为i+1的字符串最多切割i次就能满足题目要求 。当添加一个字符后,我们需要依次判断以它为末尾的子字符串是否是回文字符串,如果是,则要计算剩余字符串需要的最少切割次数加上一次是否能使当前的最少切割次数更少,注意如果此时整个字符串就是回文字符串,则最少切割次数为0。递推表达式如下:
dp[i] = 0, 如果s[:i+1]是回文串dp[i] = min(dp[i], dp[j-1]+1), 如果s[j:i+1]是回文串
为了减少判断回文字符串时的计算,我们通过一个二维数组isPal[j][i]
来缓存判断结果,isPal[j][i]
表示字符串s[j:i+1]是否是回文字符串。
AC源码
class Solution(object): def minCut(self, s): """ :type s: str :rtype: List[List[str]] """ n = len(s) dp = [0 for __ in range(n)] isPal = [[False for __ in range(n)] for __ in range(n)] for i in range(n): m = i for j in range(i + 1): if s[j] == s[i] and (j + 1 > i - 1 or isPal[j + 1][i - 1]): isPal[j][i] = True m = 0 if j == 0 else min(m, dp[j - 1] + 1) dp[i] = m return dp[-1]if __name__ == "__main__": assert Solution().minCut("aab") == 1
欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源码。
0 0
- LeetCode : Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- leetcode:Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- leetcode - Palindrome Partitioning II
- [LeetCode]Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- leetcode Palindrome Partitioning II
- LeetCode-Palindrome Partitioning II
- [leetcode] Palindrome Partitioning II
- LeetCode - Palindrome Partitioning II
- [Leetcode]Palindrome Partitioning II
- 【leetcode】Palindrome Partitioning II
- LeetCode Palindrome Partitioning II
- [leetcode]Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning II
- [LeetCode] Palindrome Partitioning II
- 第一范式、第二范式、第三范式、BC范式
- 【VS】加载Microsoft符号服务器文件取消
- Linux IP地址隧道访问
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名
- 区间迭代法 interval iterative method
- LeetCode Palindrome Partitioning II
- 实验四课后作业
- 【bzoj3450】Tyvj1952 Easy 期望DP
- usaco海明码(白银的题,竟然我根本读不懂,o(︶︿︶)o 唉)
- [Lintcode]Ugly Number
- Java Lambda Expression
- 字符类型转换工具类
- 随机森林
- C# LIST和STRING互相转换