leetcode132 分割回文串 II golang

lucasgao · · 468 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

132. 分割回文串 II

image.png

解题思路

  1. 首先预计算 dp[i][j] 用来表示 s[i:j+1]是否为回文字符串
    1. 其中 dp[i][j]= s[i]==s[j] && dp[i+1][j-1]
  2. 然后再设 A[i] 表示为 s[0:i+1] 需要切割的次数
    1. 则有转移方程 A[i]= A[j]+1, 其中 j<i 并且 s[j+1:i]为回文字符串
    2. 如果s[:i+1]本身为回文字符串,则A[i]=0,不需要再遍历j

代码

func minCut(s string) int {
    if len(s)==1{
        return 0
    }
    n := len(s)
    dp := make([][]bool,n)
    for i:=range dp{
        dp[i]=make([]bool,n)
        dp[i][i]=true
        if i>0{
            dp[i][i-1]=true
        }
    }
    for l:=2;l<=n;l++{
        for i:=0;i+l<=n;i++{
            j := i+l-1
            dp[i][j] = s[i]==s[j] && dp[i+1][j-1]
        }
    }

    A := make([]int,n)
    A[0]=0

    for i:=1;i<n;i++{
        if dp[0][i]{
            continue
        }
        A[i]=1e9
        for j:=0;j<i;j++{
            if dp[j+1][i]{
                A[i]=min(A[i],A[j]+1)
            }
        }
    }
    // fmt.Println(A)
    return A[len(A)-1]

}


func min(a,b int)int{
    if a<b{
        return a
    }
    return b
}

有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:lucasgao

查看原文:leetcode132 分割回文串 II golang

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

468 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传