680. 分割字符串

中文
English

给一个字符串,你可以选择在一个字符或两个相邻字符之后拆分字符串,使字符串由仅一个字符或两个字符组成,输出所有可能的结果

样例

样例1

输入: "123"
输出: [["1","2","3"],["12","3"],["1","23"]]

样例2

输入: "12345"
输出: [["1","23","45"],["12","3","45"],["12","34","5"],["1","2","3","45"],["1","2","34","5"],["1","23","4","5"],["12","3","4","5"],["1","2","3","4","5"]]
class Solution:
"""
@param: : a string to be split
@return: all possible split string array
"""
result = [] def splitString(self, s):
# write your code here
self.split_string_helper(s, start_index=0, path=[])
return self.result def split_string_helper(self, s, start_index, path):
if start_index >= len(s):
self.result.append(list(path))
return for step in (1, 2):
if start_index + step > len(s): # if no this clause, bug for "1" => ["1", "1"]
return
comb = s[start_index:start_index+step]
path.append(comb)
self.split_string_helper(s, start_index+step, path)
path.pop()

582. 单词拆分II

中文
English

给一字串s和单词的字典dict,在字串中增加空格来构建一个句子,并且所有单词都来自字典。
返回所有有可能的句子。

样例

样例 1:

输入:"lintcode",["de","ding","co","code","lint"]
输出:["lint code", "lint co de"]
解释:
插入一个空格是"lint code",插入两个空格是 "lint co de"

样例 2:

输入:"a",[]
输出:[]
解释:字典为空
import sys
import json def load_data():
data = json.loads(sys.stdin.read())
return data["string"], set(data["word_list"]) def dfs(s, start, words, arr, results):
if start == len(s):
results.append(",".join(arr))
return
for i in range(start, len(s)):
word = s[start:i+1]
if word in words:
arr.append(word)
dfs(s, i+1, words, arr, results)
arr.pop() def main():
string, words = load_data()
results, arr = [], []
start = 0
dfs(string, start, words, arr, results)
results.sort()
print(json.dumps({'results': results})) if __name__ == "__main__":
main()

当然,如果使用cache的话,更快:

class Solution:
"""
@param: s: A string
@param: wordDict: A set of words.
@return: All possible sentences.
""" def wordBreak(self, s, wordDict):
# write your code here
self.cache = {}
return [" ".join(words) for words in self.dfs(s, words_dict=wordDict)] def dfs(self, s, words_dict):
if s in self.cache:
return self.cache[s] if not s:
return [[]] result = []
for i in range(0, len(s)):
word = s[:i + 1]
if word in words_dict:
for w in self.dfs(s[i + 1:], words_dict):
result.append([word] + w) self.cache[s] = result
return result

  

最新文章

  1. 数据库日常维护-CheckList_03有关数据库数据文件大小检查
  2. 【微信Java开发 --1】内网穿透外网,使用外网域名可以访问到本地项目
  3. CMD规范(通用模块定义规范)(翻译)
  4. 树形DP+RMQ+单调队列(Bob’s Race HDU4123)
  5. 一篇介绍jquery很好的
  6. 玩转createjs
  7. 一个Restful Api的访问控制方法
  8. vim php代码规范
  9. 2.定义图形类Shape,该类中有获得面积的方法getArea();定义长方形类Rect,该类是Shape的子类,类中有矩形长和宽的变量double a,double b,设置长和宽的方法setWidth()、setHeight(),使用getArea()求矩形面积;利用getArea方法实现题1中圆面积的求解。
  10. .net MVC开源项目分享(1) 项目的基本情况
  11. IDEA的快捷键的使用
  12. 本地安装了Maven但Eclipse的Preferences中没有Maven怎么办?
  13. tp 内置压缩文件zip
  14. PHP学习第一天
  15. 数据仓库基础(七)Informatica PowerCenter介绍
  16. POJ----The Suspects
  17. bzoj2820-GCD
  18. 木块问题(UVa101)
  19. 图片变换【Matrix】矩阵 简介
  20. python 下载安装setuptools及pip应用

热门文章

  1. 解决chrome浏览器插件开发者模式每次启动要确认弹出框的问题
  2. 超详尽-QThread的正确使用姿势-以及信号槽的跨线程使用
  3. 基于redis+lua实现高并发场景下的秒杀限流解决方案
  4. PHP设计模式 - 状态模式
  5. LINGO与EXCEL之间的数据传递
  6. SQL Server 从Excel导入到数据库操作遇到的科学计数法问题
  7. python教程:用简单的Python编写Web应用程序
  8. libevent源码分析三--signal事件响应
  9. for循环与if条件语句的复习运用
  10. golang 之 flag