给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。
说明:
- 拆分时可以重复使用字典中的单词。
- 你可以假设字典中没有重复的单词。
示例 1:
输入: s = "leetcode", wordDict = ["leet", "code"] 输出: true 解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。示例 2:
输入: s = "applepenapple", wordDict = ["apple", "pen"] 输出: true 解释: 返回 true 因为"applepenapple"可以被拆分成"apple pen apple"。 注意你可以重复使用字典中的单词。示例 3:
输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 输出: false动态规划
dp[i]表示dp[0...i]是否可以拆分
检查j位于0~i-1之间,如果dp[j]为真,检查str[j...i]是否在字典中
dp[0]为true为边界class Solution { public: bool wordBreak(string s, vector<string>& wordDict) { vector<int>dp(s.size()+1,false); dp[0]=true; for(int i=1;i<=s.size();i++) { for(int j=0;j<i;j++) { if(dp[j]) { for(int k=0;k<wordDict.size();k++) { if(wordDict[k]==s.substr(j,i-j)) { dp[i]=true; break; } } } } } return dp[s.size()]; } };
Leetcode 139. 单词拆分 DP
最新推荐文章于 2022-09-07 08:03:05 发布