leetcode筆記:Word Break
阿新 • • 發佈:2018-01-23
nor segment tis 能夠 views dbr lease container 掌握
can be segmented as
一. 題目描寫敘述
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
"leet code"
.
二. 題目分析
假設使用遞歸,會超時。
這時使用動態規劃就可以解決這個問題,即將源字符串s從開始到結尾。分解成各個子串進行操作,對於這類字符串組合問題,須要掌握相似狀態轉移方程。
對於下標i
所相應字符的匹配狀態flag[i]
,假設dict有字符串能夠匹配,這取決於之前某個字符j
的狀態出現匹配。且從數組s的j + 1
到i
下標之間的字符也能從dict中找到匹配的字符串:
flag[i] = any(flag[j] && (s[j + 1, i] ∈ dict))
三. 演示樣例代碼
class Solution
{
public :
bool wordBreak(string s, unordered_set<string> &dict)
{
vector<bool> wordFlag(s.size() + 1, false); // 動態規劃
wordFlag[0] = true;
for (int i = 1; i < s.size() + 1; ++i)
{
for (int j = i - 1; j >= 0; --j)
{
if (wordFlag[j] && dict.find(s.substr(j, i - j)) != dict.end())
{
wordFlag[i] = true;
break;
}
}
}
return wordFlag[s.size()];
}
};
四. 小結
動態規劃對於解決一些字符串的問題也是有效且easy實現的。
leetcode筆記:Word Break