leetcode阶段总结——分割字符串类型
字符串系列问题
分割回文串
回文串系列的一个通用解法是动态规划,在是否需要输出回文串分割内容的不同要求下,写法也不同。
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回 s 所有可能的分割方案。
示例:
输入: "aab"
输出:
[
["aa","b"],
["a","a","b"]
]
class Solution:def partition(self, s: str) -> List[List[str]]:length = len(s)dp = [[False] * length for _ in range(length)]for i in range(length):for j in range(i + 1):if s[i] == s[j] and (i - j <= 2 or dp[j + 1][i - 1]):dp[j][i] = Trueresult = []def helper(index,temp):if index == length:result.append(temp)returnfor i in range(index,length):if dp[index][i]:helper(i + 1,temp + [s[index:i + 1]])helper(0,[])return result
这种问题就是注意分清楚回溯的边界就好啦。
给定一个字符串 s,将 s 分割成一些子串,使每个子串都是回文串。
返回符合要求的最少分割次数。
示例:
输入: "aab"
输出: 1
解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。
class Solution:def minCut(self, s: str) -> int:n = len(s)min_s = list(range(n))dp = [[False] * n for _ in range(n)]for i in range(n):for j in range(i + 1):if s[i] == s[j] and (i - j <= 2 or dp[j + 1][i - 1]):dp[j][i] = Trueif j == 0:min_s[i] = 0else:min_s[i] = min(min_s[i],min_s[j - 1] + 1)return min_s[-1]
不需要得到具体的分割方案时,只要记录每个节点对应的分割次数即可。
单词拆分
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。
说明:
分隔时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
示例 1:
输入:
s = "catsanddog"
wordDict = ["cat", "cats", "and", "sand", "dog"]
输出:
[
"cats and dog",
"cat sand dog"
]
示例 2:
输入:
s = "pineapplepenapple"
wordDict = ["apple", "pen", "applepen", "pine", "pineapple"]
输出:
[
"pine apple pen apple",
"pineapple pen apple",
"pine applepen apple"
]
解释: 注意你可以重复使用字典中的单词。
示例 3:
输入:
s = "catsandog"
wordDict = ["cats", "dog", "sand", "and", "cat"]
输出:
[]
注意记忆化递归的写法。
class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> List[str]:if not wordDict:return []minLength,maxLength,length = len(wordDict[0]),len(wordDict[0]),len(s)wordDict = set(wordDict)for word in wordDict:minLength = min(minLength,len(word))maxLength = max(maxLength,len(word))def helper(index):if not index in lookup:result = []for i in range(minLength,min(maxLength,length - index) + 1):word = s[index:index + i]if word in wordDict:temp = [word + " " + j for j in helper(index + i)]result.extend(temp)lookup[index] = resultreturn lookup[index]lookup = {length:[""]}helper(0)return [i[:-1] for i in lookup[0]]
给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。 说明:
拆分时可以重复使用字典中的单词。
你可以假设字典中没有重复的单词。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"]
输出: true
解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
注意你可以重复使用字典中的单词。
示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
输出: false
同样只要记录每个字母位置的拆分次数即可。
class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:""":type s: str:type wordDict: List[str]:rtype: bool"""breakp = [0]length = len(s)for i in range(length + 1):for j in breakp:if s[j:i] in wordDict:breakp.append(i)breakreturn breakp[-1] == len(s)
leetcode阶段总结——分割字符串类型相关推荐
- leetcode系列-131.分割字符串
leetcode系列–第131题.分割字符串 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是 回文串 .返回 s 所有可能的分割方案.回文串 是正着读和反着读都一样的字符串. 输入:s ...
- 图解LeetCode——1422. 分割字符串的最大得分(难度:简单)
一.题目 给你一个由若干 0 和 1 组成的字符串 s ,请你计算并返回将该字符串分割成两个 非空 子字符串(即 左 子字符串和 右 子字符串)所能获得的最大得分. 「分割字符串的得分」为 左 子字符 ...
- python中字符串类型的encode()方法_第五章 Python字符串常用方法详解
5.1 Python字符串拼接(包含字符串拼接数字) 在 Python中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起,具体格式为: strname = "str1" ...
- php字符串类型讲解
PHP 支持八种原始类型(type). 四种标量类型: string(字符串) integer(整型) float(浮点型,也作 double ) boolean(布尔型) 两种复合类型: array ...
- python json字符串类型的value换行方案
按照标准json语法,字符串类型的value是不能换行写的. 例如,以下是错误的写法 {"key":"helloworld" } 但是遇到了需要在json中写代 ...
- python基础教程:数值与字符串类型
Python3 中有六个标准的数据类型:Number(数字).String(字符串).List(列表).Tuple(元组).Sets(集合).Dictionary(字典). 不可变数据(四个):Num ...
- 题库练习2(随机数去重排序、分割字符串、进制转换)
1. 随机数去重排序 明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉 ...
- php和mysql两种不同方式的分割字符串和类型转换
一.sql语句1.分割字符串方法:substring_index(字符串,'分隔符',正数从左数起几位/负数从右数起几位); 例如:subtring_index('aa_bb_cc_dd','_',1 ...
- 字符串类型str方法
首字母大写 temp = 'rttty' ret = temp.capitalize() print(ret) =================================== 内容居中 tem ...
最新文章
- Github上的十大机器学习项目
- springboot获取sessionid_Spring Boot 整合Redis, 用起来真简单!
- springboot 2.0.5配置Druid连接池和web监控后台
- ASP.NET Core微服务(四)——【静态vue使用axios解析接口】
- 重温.NET下Assembly的加载过程
- T-SQL编程基础之三:游标(Cursor)编程
- “约见”面试官系列之常见面试题第十八篇之深拷贝和浅拷贝得区别(建议收藏)
- 计算机如何添加管理员权限,电脑使用代码如何添加管理员权限
- Json解析工具Jackson(使用注解)
- 基础编程题目集 6-7 统计某类完全平方数 (20 分)
- Shell脚本:Linux Shell脚本学习指南(超详细)
- fckeditor for java_基于java使用FCKeditor
- 前端工程师必备的ps技巧 — 切图
- 企业微信第三方服务商和钉钉ISV开发对比
- python 处理英文步骤
- java tld 方法重载_java 中的TLD文件
- 【Unity入门教程】 第八章 人工智能【中国大学MOOC游戏引擎原理及应用】
- 视觉slam中的一种单目稠密建图方法
- 分布式系统开发实战:分布式存储,分布式存储常用技术
- 又涨了!2021 年 5 月程序员工资统计新鲜出炉,网友:还是Java程序员牛逼~
热门文章
- linux mysql命令行导入_在linux中导入sql文件的方法分享(使用命令行转移mysql数据库)...
- 杀手皇后 JoJo奇妙冒险 漫画人物3d模型
- 诚之和:Python数据科学使用numpy求行均值
- 自动化脚本测试代码参考
- Hexo 博客快速整合公众号导流工具,不用互推也能实现粉丝躺增!
- lammps案例:fix indent命令实现纳米摩擦及摩擦力计算
- 【20保研】北京航空航天大学网络空间安全学院 “2019年暑期优秀大学生夏令营”活动通知...
- nyoj 541 最强DE 战斗力
- Aseprite入门教程
- 儒家、儒学、儒教之三个不同的概念