139. Word Break
Description
Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
Note:
The same word in the dictionary may be reused multiple times in the segmentation.
You may assume the dictionary does not contain duplicate words.
Constraints
Approach
Links
GeeksforGeeks
YouTube
Examples
Input: s = "leetcode", wordDict = ["leet", "code"]
Output: true
Explanation: Return true because "leetcode" can be segmented as "leet code".
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.
Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
Output: false
Solutions
/**
* Time complexity :
* Space complexity :
*/
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
int sLen = s.length();
int[] pos = new int[sLen+1];
Arrays.fill(pos, -1);
pos[0] = 0;
for(int i = 0; i < sLen; i++) {
if(pos[i] != -1) {
for(int j = i+1; j <= sLen; j++) {
String str = s.substring(i, j);
if(wordDict.contains(str)) {
pos[j] = i;
}
}
}
}
return pos[sLen] != -1;
}
}/**
* Time complexity :
* Space complexity :
*/
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
if(s.length() > 100) return false;
for(String word: wordDict) {
if(s.startsWith(word) &&
(s.equals(word) ||
wordBreak(s.substring(word.length()), wordDict))) {
return true;
}
}
return false;
}
}Follow up
Last updated
Was this helpful?