1. 程式人生 > >leetcode筆記:Word Break

leetcode筆記:Word Break

nor segment tis 能夠 views dbr lease container 掌握

一. 題目描寫敘述

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"

can be segmented as "leet code".

二. 題目分析

假設使用遞歸,會超時。

這時使用動態規劃就可以解決這個問題,即將源字符串s從開始到結尾。分解成各個子串進行操作,對於這類字符串組合問題,須要掌握相似狀態轉移方程。

對於下標i所相應字符的匹配狀態flag[i],假設dict有字符串能夠匹配,這取決於之前某個字符j的狀態出現匹配。從數組s的j + 1i下標之間的字符也能從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