139.单词拆分
1、题目
给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。
题目链接:https://leetcode.cn/problems/word-break/
2、代码
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
unordered_set<string> wordSet(wordDict.begin(), wordDict.end());
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++){
string word = s.substr(j, i - j);
if(wordSet.find(word) != wordSet.end() && dp[j] != false){
dp[i] = true;
}//前一个字符存在
}
}
return dp[s.size()];
}
};
3、小结
该题使用背包算法,首先将dp数组初始化为false,dp[0] = true。其次,通过j和i截取字符子串并判断其是否在字典中。该题还可以使用回溯算法进行解答。