zoukankan      html  css  js  c++  java
  • 【leetcode】1278. Palindrome Partitioning III

    题目如下:

    You are given a string s containing lowercase letters and an integer k. You need to :

    • First, change some characters of s to other lowercase English letters.
    • Then divide s into k non-empty disjoint substrings such that each substring is palindrome.

    Return the minimal number of characters that you need to change to divide the string.

    Example 1:

    Input: s = "abc", k = 2
    Output: 1
    Explanation: You can split the string into "ab" and "c", and change 1 character in "ab" to make it palindrome.
    

    Example 2:

    Input: s = "aabbc", k = 3
    Output: 0
    Explanation: You can split the string into "aa", "bb" and "c", all of them are palindrome.

    Example 3:

    Input: s = "leetcode", k = 8
    Output: 0

    Constraints:

    • 1 <= k <= s.length <= 100.
    • s only contains lowercase English letters.

    解题思路:记dp[i][j] = v 表示s[0:j]区间内分割成j段,只需要改变v个字符就可以使得每一段的子串都是回文串。要求dp[i][j]的值,关键就是找出j和j-1的分割点。很显然有dp[i][j] = min(dp[m][j-1] + s[m:j]需要改变的字符的个数),只需要找出最小的分割点m即可。

    代码如下:

    class Solution(object):
        def palindromePartition(self, s, k):
            """
            :type s: str
            :type k: int
            :rtype: int
            """
            def calc(substr):
                count = 0
                for i in range(len(substr)/2):
                    if substr[i] != substr[len(substr)-i - 1]:count += 1
                return count
    
            dp = [[float('inf')] * k for _ in s]
            dp[0][0] = 0
            for i in range(len(s)):
                for j in range(k):
                    if j == 0:
                        dp[i][j] = calc(s[:i+1])
                        continue
                    for m in range(j-1,i):
                        dp[i][j] = min(dp[i][j],dp[m][j-1] + calc(s[m+1:i+1]))
            #print dp
            return dp[-1][-1]
  • 相关阅读:
    汉诺塔问题合集之汉诺塔6
    汉诺塔问题合集之汉诺塔5
    接口和抽象类有什么区别
    Java版本:JDK8的十大新特性介绍
    Linux的常用命令
    行为型模式——策略模式
    shell 后台执行命令
    ORA-01034:oracle不可用 的解决方法
    ORA-12514 TNS 监听程序当前无法识别连接描述符中请求服务 的解决方法
    linux下启动oracle
  • 原文地址:https://www.cnblogs.com/seyjs/p/12000533.html
Copyright © 2011-2022 走看看