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]
  • 相关阅读:
    调试技巧--Windows端口号是否被占用
    如何制定自己的职业规划
    SQL总结(四)编辑类
    SQL总结(三)其他查询
    CompareAndSwap原子操作原理
    JVM调优之服务内存超过阈值报警
    Javassist中文技术文档
    微言Netty:分布式服务框架
    共享变量边界处理
    Netty客户端发送消息并同步获取结果
  • 原文地址:https://www.cnblogs.com/yunxintryyoubest/p/12961521.html
Copyright © 2011-2022 走看看