标签:current 分割 cut return range II 108 回文
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]
标签:current,分割,cut,return,range,II,108,回文 来源: https://www.cnblogs.com/yunxintryyoubest/p/12961521.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。