首页 > 其他分享 >139. 单词拆分

139. 单词拆分

时间:2023-05-30 15:34:17浏览次数:31  
标签:int 单词 拆分 startdex wordDict 139 true dp size

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

注意:不要求字典中出现的单词全部都使用,并且字典中的单词可以重复使用。


输入: s = "leetcode", wordDict = ["leet", "code"]
输出: true
解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成

> 我的解法


class Solution {
private:
    int process(string a, int startdex, string b) {
        int len = b.size();
        for (int i = 0; i < len; i++, startdex++) {
            if(startdex >= a.size()) return -1;
            if (b[i] != a[startdex]) return -1;
        }
        return startdex;
    }
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        vector<bool> dp(s.size() + 1, false);
        dp[0] = true;
        //求排列数
        for (int i = 0; i < s.size(); i++) { //先背包
            if (dp[i] == true) {
                for (int j = 0; j < wordDict.size(); j++) { //在物品
                    int nextdex = process(s, i, wordDict[j]);
                    if (nextdex != -1 && nextdex <= s.size()) {
                        dp[nextdex] = true;
                    }
                }
            }
        }
        return dp[s.size()];
    }
};

> 标准解法


class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        vector<bool> dp(s.size() + 1, false);
        dp[0] = true;
        for (int i = 1; i <= s.size(); i++) {   // 遍历背包
            for (int j = 0; j < i; j++) {       // 遍历物品
                string word = s.substr(j, i - j); //substr(起始位置,截取的个数)
                if (wordSet.find(word) != wordSet.end() && dp[j]) {
                    dp[i] = true;
                }
            }
        }
        return dp[s.size()];
    }
};

标签:int,单词,拆分,startdex,wordDict,139,true,dp,size
From: https://www.cnblogs.com/lihaoxiang/p/17443375.html

相关文章

  • 剑指 Offer 58 - I. 翻转单词顺序
    题目描述:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"Iamastudent.",则输出"student.aamI"。  方法:分割+倒序  classSolution{publicStringreverseWords(Strings){......
  • [NOIP2000 提高组] 单词接龙
    [NOIP2000提高组]单词接龙题目背景注意:本题为上古NOIP原题,不保证存在靠谱的做法能通过该数据范围下的所有数据。题目描述单词接龙是一个与我们经常玩的成语接龙相类似的游戏,现在我们已知一组单词,且给定一个开头的字母,要求出以这个字母开头的最长的“龙”(每个单词都最多在......
  • web基础漏洞-响应拆分漏洞
    1、介绍典型的响应拆分漏洞,是指的http响应字段拆分漏洞。即服务端动态将参数写入返回给用户的响应的头部字段中,该参数可以被攻击者控制,使包含\r\n这两个用于分隔不同响应头部行的字段或者\r\n\rn用于分隔响应头部与响应体部字段,同时写入响应过程未被阻止,那么用户接收到响应时,浏......
  • 自动拆分出地址中的省市区
    //识别地址的方法splitAddressInfo(address){address=address.replace(/[^\u4E00-\u9FA5a-zA-Z0-9]/g,'');constnameRegex=/(.+?)(\d+)/;constcontactRegex=/(\d{11})/;......
  • Python实现将Excel表格按某列拆分为多个sheet
    <生信交流与合作请关注公众~号@生信探索>实际数据分析中遇到需求,把某个Excel表格按照某一列分为多个sheet,并且要求如果某个key对应的行数较少应该合并到一个sheet中。importpandasaspdimportbioquestasbq#https://jihulab.com/BioQuest/bioquest从网上找随便了个数据......
  • AtCoder Regular Contest 139 E Wazir
    洛谷传送门AtCoder传送门好题。这种题一般可以考虑,观察最优解的性质,对于性质计数。发现如果\(n,m\)均为偶数,可以放满。就是类似这样:#.#.#..#.#.##.#.#..#.#.#因此答案就是\(2\)。如果\(n,m\)有一个为偶数,不妨假设\(n\)为偶数。那么最优解形似:#.#...#..##..#......
  • 【华为机试】单词倒叙
    题目描述:输入单行英文句子,里面包含英文字母,空格以及,.?三种标点符号,请将句子内每个单词进行倒序,并输出倒序后的语句输入描述:输入字符串S,S的长度1≤N≤100输出描述:输出逆序后的字符串。解题思路:遍历给定句子,判断如果字母,则插入到指定位置,如果是指定标点,则追......
  • CF1139E Maximize Mex 题解
    Description\(n\)个学生,\(m\)个社团。每个学生有一个能力值,且仅属于一个社团。这\(d\)天内,每天从\(m\)个社团中选人,使得选出的人的能力值的\(\text{mex}\)最大。每天会有一个人在选人之前退团。\(d,m\leqn\leq5000\)Solution巧妙建图题。首先,我们可以很显然的......
  • P1859 单词接龙
    #include<iostream>#include<cstring>#include<cmath>usingnamespacestd;intn,length=0,vis[1000]={0};stringstr[1000];inlineintcheck(stringa,stringb){intp=min(a.length(),b.length());for(inti=1;a.length()==1?i<=p:i......
  • 剑指 Offer 58 - I. 翻转单词顺序
    剑指Offer58-I.翻转单词顺序</br></br>题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"Iamastudent.",则输出"student.aamI"。示例1:输入:"theskyisblue"输出:"blueisskythe"......