首页 > 其他分享 >有意义的单词分割——经典dfs题目

有意义的单词分割——经典dfs题目

时间:2023-05-31 10:33:53浏览次数:26  
标签:题目 string self results dfs 单词 start words return

 

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

 

  

标签:题目,string,self,results,dfs,单词,start,words,return
From: https://blog.51cto.com/u_11908275/6384763

相关文章

  • 算法- 求解最大平均值的子树-经典dfs题目
    给一棵二叉树,找到有最大平均值的子树。返回子树的根结点。Example样例1输入:{1,-5,11,1,2,4,-2}输出:11说明:这棵树如下所示:1/\-511/\/\124-211子树的平均值是4.333,为最大的。样例2输入:{1,-5,11}输出:11说明:1/\-5......
  • dfs 二叉树中序遍历迭代解法——求解BST中第k小元素
    BST中第K小的元素中文English给一棵二叉搜索树,写一个 KthSmallest 函数来找到其中第K小的元素。Example样例1:输入:{1,#,2},2输出:2解释: 1 \ 2第二小的元素是2。样例2:输入:{2,1,3},1输出:1解释:2/\13第一小的元素是1。Challenge如果这棵BST经常会被修改(......
  • 【NSSCTF逆向】【2023题目】《doublegame》《fake_game》《easy_pyc》《For Aiur》
    题目doublegame解法感觉还是蛮抽象的一题打开看看是一个贪吃蛇,也不懂啥直接放进ida看看有很多函数,不想一个个看了,直接看string感觉有很多有用的信息,题目信息又说是doublegame所以应该还有一个游戏,看红框的内容应该是这个迷宫了,点进去通过交叉引用看看ok就是一个迷宫,......
  • 算法 dfs —— 将二叉树 先序遍历 转为 链表
    将二叉树拆成链表中文English将一棵二叉树按照前序遍历拆解成为一个 假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。Example样例1:输入:{1,2,5,3,4,#,6}输出:{1,#,2,#,3,#,4,#,5,#,6}解释:1/\25/\\3461\2......
  • 算法 dfs 二叉树的所有路径
    480. 二叉树的所有路径给一棵二叉树,找出从根节点到叶子节点的所有路径。Example样例1:输入:{1,2,3,#,5}输出:["1->2->5","1->3"]解释:1/\23\5样例2:输入:{1,2}输出:["1->2"]解释:1/2"""DefinitionofTreeNode:classTree......
  • 算法 翻转二叉树 dfs
    翻转二叉树翻转一棵二叉树。左右子树交换。Example样例1:输入:{1,3,#}输出:{1,#,3}解释: 11 /=>\ 33样例2:输入:{1,2,3,#,#,4}输出:{1,3,2,#,4}解释: 11/\/\23=>32/\4......
  • 算法——dfs 判断是否为BST
    95. 验证二叉查找树中文English给定一个二叉树,判断它是否是合法的二叉查找树(BST)一棵BST定义为:节点的左子树中的值要严格小于该节点的值。节点的右子树中的值要严格大于该节点的值。左右子树也必须是二叉查找树。一个节点的树也是二叉查找树。Example样例1:输入:{-1}输出:true解......
  • MongoDB C++ gridfs worked example
    使用libmongoc,参考:http://mongoc.org/libmongoc/current/mongoc_gridfs_t.html#include<mongoc.h>#include<stdio.h>#include<stdlib.h>#include<fcntl.h>classMongoGridFS{public:MongoGridFS(constchar*db);~MongoGridFS();......
  • 139. 单词拆分
    给你一个字符串s和一个字符串列表wordDict作为字典。请你判断是否可以利用字典中出现的单词拼接出s。注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。输入:s="leetcode",wordDict=["leet","code"]输出:true解释:返回true因为"leetcod......
  • CKA可能的题目
    以下是一些可能在CertifiedKubernetesAdministrator(CKA)认证考试中遇到的题目示例:题目类型:单选题题目:在Kubernetes中,哪个对象用于部署和管理容器化应用程序?a)Deploymentb)Podc)Serviced)ReplicaSet答案:a)Deployment题目类型:多选题题目:下面哪些命令可以用于......