Word Break
The problem
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 otherwise return false.
Note : The same word in dictionary can be used multiple times in segmentation.
Input : s = "takeuforward" , wordDict = ["take" , "forward" , "you", "u"] Output : true Explanation : Return true because "takeuforward" can be segmented as "take" , "u" , "forward".
Input : s = "applepineapple" , wordDict = ["apple"] Output : false Explanation : Return false because "applepineapple" can be segmented as "apple" , "pine" , "apple" but here we do not have "pine" word in dictionary.
Input : s = "catsanddogs" , wordDict = ["and" , "dogs" ,"cats", "animals"]
- 1 <= s.length <= 300
- 1 <= wordDict.length <= 1000
- 1 <= wordDict[i].length <= 20
- s and wordDict[i] consist only of English lowercase letters.
- All strings in wordDict are unique.
cpp
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
// Your code goes here
}
};java
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
// Your code goes here
}
}python
class Solution:
def wordBreak(self, s: str, wordDict: list[str]) -> bool:
# Your code goes herejavascript
class Solution {
wordBreak(s, wordDict) {
// Your code goes here
}
}csharp
class Solution {
public bool WordBreak(string s, List<string> wordDict) {
}
}go
func wordBreak(s string, wordDict []string) bool {
}Stuck? Show a way to structure it+
- 01Put dictionary words in a hash set.
- 02Let dp[i] mean prefix s[0..i) is segmentable.
- 03For each reachable prefix, try valid next word endings.
- 04Return dp[n] and explain repeated-word allowance.
Reference answer
Then expect these follow-ups
How does a trie change the transitions?
Tests: tries
Why can greedy matching fail?
Tests: counterexamples
Free to read · better with Enzo
Practice this out loud with Enzo
Enzo runs it as a mock interview, pushes back with follow-ups, and grades you on the rubric.
Next question