力扣 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开始遍历

相关推荐
FPGA_无线通信3 分钟前
OFDM 精频偏补偿
算法·fpga开发
FMRbpm4 分钟前
栈练习--------从链表中移除节点(LeetCode 2487)
数据结构·c++·leetcode·链表·新手入门
程序员-King.6 分钟前
day109—同向双指针(字符串)—每个字符最多出现两次的最长子字符串(LeetCode-3090)
算法·leetcode·双指针
青山的青衫6 分钟前
【单调栈和单调队列】LeetCode hot100+面试高频
算法·leetcode·面试
俊俊谢14 分钟前
【浮点运算性能优化】浮点转定点算法库的多平台通用移植方案与性能评估优化
算法·性能优化·c·浮点转定点·多平台移植
电饭叔15 分钟前
Luhn算法与信用卡识别完善《python语言程序设计》2018版--第8章14题利用字符串输入作为一个信用卡号之三
android·python·算法
bbq粉刷匠20 分钟前
力扣-电话号码组合
java·算法
狗头实习生29 分钟前
电话号码字母组合
java·算法·leetcode
C雨后彩虹35 分钟前
矩阵扩散问题
java·数据结构·算法·华为·面试
独自破碎E35 分钟前
力场重叠问题
java·开发语言·算法