Leetcode Note: Word Break
I. Description
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"leet code".
Ii. Question Analysis
If recursion is used, it will time out. In this case, you can use dynamic planning to solve the problem, that is, breaking the source string s from the start to the end into substrings for operations. For this type of string combination problem, you need to master the similar state transition equation. For subscriptiMatching status of corresponding charactersflag[i]If dict has strings that can be matched, it depends on a previous character.j,AndFrom the array sj + 1ToiThe characters between subscripts can also find matching strings from dict:
flag[i] = any(flag[j] && (s[j + 1, i] ∈ dict))
Iii. Sample Code
Class Solution {public: bool wordBreak (string s, unordered_set
& Dict) {vector
WordFlag (s. size () + 1, false); // dynamically planned 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 ()] ;}};
Iv. Summary
Dynamic Planning is also effective and easy to implement to solve some string problems.