力扣 hot100 Day76

139. 单词拆分

给你一个字符串 s 和一个字符串列表 wordDict 作为字典。如果可以利用字典中出现的一个或多个单词拼接出 s 则返回 true

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

cpp 复制代码
class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
        unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
        
        int n = s.size();
        vector<bool> dp(n + 1, false);
        dp[0] = true;
 
        int maxLen = 0;
        for (const string& word : wordDict) {
            maxLen = max(maxLen, (int)word.length());
        }
        
        for (int i = 1; i <= n; ++i) {
            int start = max(0, i - maxLen);
            for (int j = start; j < i; ++j) {
                if (dp[j] && wordSet.count(s.substr(j, i - j))) {
                    dp[i] = true;
                    break;
                }
            }
        }
        
        return dp[n];
    }
};

状态转换核心逻辑是,如果dp[j]为true,并且(j,i-j)这一段在字典中,那么dp[i]也为真

定义了一个start优化效率,逻辑是,如果此时i大于最大字符串长度,那就没必要从0开始遍历

相关推荐
我命由我123456 小时前
Photoshop - Photoshop 工具库
笔记·学习·ui·职场和发展·职场·photoshop·ps
vortex56 小时前
HTB Mailing 靶机渗透记录:利用 CVE-2024-21413 捕获 NTLM Hash
算法·哈希算法
王哥儿聊AI7 小时前
告别人工出题!PromptCoT 2.0 让大模型自己造训练难题,7B 模型仅用合成数据碾压人工数据集效果!
人工智能·深度学习·算法·机器学习·软件工程
机器学习之心8 小时前
198种组合算法+优化BiGRU双向门控循环单元+SHAP分析+新数据预测+多输出!深度学习可解释分析,强烈安利,粉丝必备!
深度学习·算法·shap分析·新数据预测·优化bigru
小胖xiaopangss9 小时前
栈的压入弹出序列--牛客
数据结构·c++·算法
_给我学起来9 小时前
前缀和数组
算法
程序员莫小特9 小时前
老题新解|求三角形面积
开发语言·数据结构·c++·算法·信息学奥赛一本通
mc23569 小时前
C语言指针详解
c语言·开发语言·算法
Asmalin9 小时前
【代码随想录day 30】 力扣 763. 划分字母区间
算法·leetcode·职场和发展
小欣加油9 小时前
leetcode 526 优美的排列
c++·算法·leetcode·职场和发展·深度优先·剪枝