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

  

有意义的单词分割——经典dfs题目的更多相关文章

  1. 算法- 求解最大平均值的子树-经典dfs题目

    给一棵二叉树,找到有最大平均值的子树.返回子树的根结点. Example 样例1 输入: {1,-5,11,1,2,4,-2} 输出:11 说明: 这棵树如下所示: 1 / \ -5 11 / \ / ...

  2. 洛谷 P1019 单词接龙【经典DFS,温习搜索】

    P1019 单词接龙 题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在 ...

  3. 33条C#、.Net经典面试题目及答案

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如".NET中类和结构的区别"."ASP.NET页面之间传递值的几种方式? ...

  4. 33条C#、.Net经典面试题目及答案[zt]

    33条C#..Net经典面试题目及答案[zt] 本文集中了多条常见的C#..Net经典面试题目例如“.NET中类和结构的区别”.“ASP.NET页面之间传递值的几种方式?”,并简明扼要的给出了答案,希 ...

  5. 经典面试题目——250M内存处理10G大小的log文件

    前言 周末逛知乎的时候,看到的一个经典面试题目:http://www.zhihu.com/question/26435483.非常经典的一道分而治之的题目. 题目描写叙述例如以下: 有次面试遇到一个问 ...

  6. POJ 1321 - 棋盘问题 - [经典DFS]

    题目链接:http://poj.org/problem?id=1321 Time Limit: 1000MS Memory Limit: 10000K Description 在一个给定形状的棋盘(形 ...

  7. 洛谷p1605--迷宫 经典dfs

    https://www.luogu.org/problemnew/show/P1605 用这种题来复习一下dfs 给定一个N*M方格的迷宫,迷宫里有T处障碍,障碍处不可通过.给定起点坐标和终点坐标,问 ...

  8. POJ 1191 棋盘分割 【DFS记忆化搜索经典】

    题目传送门:http://poj.org/problem?id=1191 棋盘分割 Time Limit: 1000MS   Memory Limit: 10000K Total Submission ...

  9. NOIP2000单词接龙[DFS]

    题目描述 单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在“龙”中出现两次),在两个单词相连时,其重合 ...

随机推荐

  1. 问题解决: 此文件来自其他计算机,可能被阻止以帮助保护该计算机/WORD在试图打开文件时遇到错误……

    最近,在打开下载的office文档(包括word.excel.ppt等)时候,总是无法直接打开,错误提示如下: 无论是邮件中的还是别的网站下载的,均提示该错误.后来搜索相关资料发现,修改其文件属性即可 ...

  2. [PHP] 浅谈 Laravel Authentication 的 auth:api

    auth:api 在 Laravel 的 Routing , Middleware , API Authentication 主题中都有出现. 一. 在 Routing 部分可以知道 auth:api ...

  3. 【Linux】修改root密码

    sudo passwd root 然后提示输入两次新密码就可以了

  4. openshift 使用curl命令访问apiserver

    openshift版本:openshift v3.6.173.0.5 使用oc(同kubectl)命令访问apiserver资源的时候,会使用到/root/.kube/config文件中使用的配置. ...

  5. java修饰符的权限范围

    java有四个修饰符,分别为public/protected/default/private,这四个修饰符的权限范围是不一样的. public修饰的成员,在同类.同包.子类(继承自本类).其他包中都可 ...

  6. kafka web端管理工具 kafka-manager【转发】

    1,下载与安装 $ git clone https://github.com/yahoo/kafka-manager.git $ cd kafka-manager $ ./sbt clean dist ...

  7. DRF框架(一)——restful接口规范、基于规范下使用原生django接口查询和增加、原生Django CBV请求生命周期源码分析、drf请求生命周期源码分析、请求模块request、渲染模块render

    DRF框架    全称:django-rest framework 知识点 1.接口:什么是接口.restful接口规范 2.CBV生命周期源码 - 基于restful规范下的CBV接口 3.请求组件 ...

  8. Django框架第七篇(模型层)--多表操作:一对多/多对多增删改,跨表查询(基于对象、基于双下划线跨表查询),聚合查询,分组查询,F查询与Q查询

    一.多表操作 一对多字段的增删改(book表和publish表是一对多关系,publish_id字段) 增  create publish_id 传数字   (publish_id是数据库显示的字段名 ...

  9. 有些CCS工程中为什么会有两个CMD文件?

    这里的CCS就是TI公司的Code Composer Studio 集成开发环境,所以这篇随笔也就是关于TI公司DSP开发过程中对于刚入门同学的一个常见问题了. 那作为一个初学者,对于CCS工程中的c ...

  10. robotframework_酷我音乐_That Girl

    *** Settings *** Library Selenium2Library *** Test Cases *** music # 打开浏览器 Open Browser https://www. ...