Monday, November 18, 2013

[LeetCode] Word Break, Solution

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"`.

[Thoughts]

possible[i] = true      if  S[0,i]在dictionary里面

= true      if   possible[k] == true 并且 S[k+1,j]在dictionary里面， 0<k<i

= false      if    no such k exist.

[Code]

` 1     bool wordBreak(string s, unordered_set<string> &dict) { 2         string s2 = '#' + s; 3         int len = s2.size(); 4         vector<bool> possible(len, 0); 5          6         possible[0] = true; 7         for(int i =1; i< len; ++i) 8         { 9             for(int k=0; k<i; ++k)10             {11                 possible[i] = possible[k] && 12                                 dict.find(s2.substr(k+1, i-k)) != dict.end();13                 if(possible[i]) break;14             }15         }16         17         return possible[len-1];18     }`