Word Break

Tags : string, array, leetcode, cpp, medium

Given a string s and a dictionary of strings wordDict, return true if s can be segmented into a space-separated sequence of one or more dictionary words.

Note: that the same word in the dictionary may be reused multiple times in the segmentation.

Examples #

Example 1:

Input: s = "leetcode", wordDict = ["leet","code"]
Output: true
Explanation: Return true because "leetcode" can be segmented as "leet code".

Example 2:

Input: s = "applepenapple", wordDict = ["apple","pen"]
Output: true
Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
Note that you are allowed to reuse a dictionary word.

Example 3:

Input: s = "catsandog", wordDict = ["cats","dog","sand","and","cat"]
Output: false

Constraints #

Solutions #

class Solution {
public:
    bool wordBreak(string s, vector<string>& wordDict) {
      
      vector<int> res(s.size()+1,0);
      res[0] = 1;
      for(int i=0; i<s.size(); i++){
        if(res[i]){
          for(auto x: wordDict){
            if(i+x.size()<res.size() and s.substr(i,x.size())==x) res[i+x.size()] = 1;
          }
        }
      }
      return res.back();
    }
};