zoukankan      html  css  js  c++  java
  • 108. 分割回文串 II

    108. 分割回文串 II

    中文English

    给定字符串 s, 需要将它分割成一些子串, 使得每个子串都是回文串.

    最少需要分割几次?

    样例

    样例 1:

    输入: "a"
    输出: 0
    解释: "a" 本身就是回文串, 无需分割
    

    样例 2:

    输入: "aab"
    输出: 1
    解释: 将 "aab" 分割一次, 得到 "aa" 和 "b", 它们都是回文串.

    大致思路:
    动态规划
    l = len(s)
    1.确定状态
    最后一步:d[l-1]
    子问题:d[i-1] = min(dj] + 1,d[i-1])

    2.转移方程
    d[i] = min(d[j] + 1 , d[i])

    3.初始条件和边界情况
    d = [sys.maxsize]*(l+1)
    d[0] = 0

    存在一种边界情况,是aaaaa这种,一直都是0,不同于bbbaa,bbb + aa 需要加1
    if s[:i] == s[:i][::-1]:
        d[i] = 0
     continue

    current_s = s[j:i]
    if current_s == current_s[::-1]

    4.计算顺序
    for i in range(1,l+1):
        for j in range(i):
            if s[j:i] == s[j:i][::-1]:
      
    class Solution:
        """
        @param s: A string
        @return: An integer
        """
        def minCut(self, s):
            # write your code here
            if not s:return 0 
            
            #初始条件
            l = len(s)
            d = [sys.maxsize]*(l+1)
            d[0] = 0
    
            #计算顺序
            for i in range(1,l+1):
                if s[:i] == s[:i][::-1]:
                    d[i] = 0
                    continue
    
                for j in range(i):
                    cut_s = s[j:i]
    
                    #边界情况
                    if cut_s == cut_s[::-1]:
                        d[i] = min(d[j] + 1,d[i])
            return d[l]
  • 相关阅读:
    redis的事务不是原子性
    Jenkins持续集成 入门实践
    Docker入门实践
    程序员该有的职业素养
    ubuntu sudoers配置错误
    日志分析工具 Log Parser
    压力测试记录
    Winscp使用sudo user登录
    Linux下通过NFS共享文件夹
    Jexus 5.4.6 on CentOS 6.6
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12961521.html
Copyright © 2011-2022 走看看