Description:
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words. You may assume the dictionary does not contain duplicate words.
For example, given
s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet
code".
Solution:
题意:判断给定string数组中是否含有能组成给定字符串s的子字符串集合。
思路:动态规划。新建一个长度为s.length()+1的bool数组dp,除数组第一位用于方便通过进入循环的边界判断外,其他每一位对应字符串s的每一个字符。
当dp[i]=true时,表示在字符串数组中,存在一个这样的字符串,等同于在字符串s中,从任意一个或多个下标为0,1,2,...,i-1开始,到下标为i结束的子字符串。
从头开始对字符串s进行遍历,这样循环操作之后,dp[s.length()]就是所求得的判断布尔值。
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
vector<bool> dp(s.length() + 1, false);
dp[0] = true;
for (int i = 1; i <= s.size(); i++) {
for (int j = 0; j < i; j++) {
if (dp[j]) {
string ss = s.substr(j, i - j);
vector<string>::iterator iter = find(wordDict.begin(), wordDict.end(), ss);
if (iter != wordDict.end()) {
dp[i] = true;
break;
}
}
}
}
return dp[s.length()];
}
};
本文介绍了一种使用动态规划解决字符串匹配问题的方法。该方法能够判断一个给定的字符串是否可以被字典中的单词完全匹配。文章提供了一个具体的实现示例,并详细解释了其工作原理。

1778

被折叠的 条评论
为什么被折叠?



