📖 Scenario: Imagine you have a long string of letters without spaces, and you want to check if it can be split into valid words from a dictionary. This is like trying to read a message where spaces are missing and figuring out if it makes sense.
🎯 Goal: You will build a simple program that checks if a given string can be broken into words found in a given dictionary. You will use a loop and a helper variable to solve this.
📋 What You'll Learn
Create a variable called word with the exact string "applepen"
Create a variable called dictionary with the exact array ["apple", "pen"]
Create a variable called canBreak and set it to false
Use a for loop with variable i from 1 to word.length
Inside the loop, use substring to check if the first part is in dictionary and the second part is also in dictionary
Print canBreak at the end
💡 Why This Matters
🌍 Real World
This problem is useful in text processing, like checking if a sentence without spaces can be understood by breaking it into known words.
💼 Career
Understanding string manipulation and loops is important for programming jobs that involve data cleaning, natural language processing, or building search engines.
Progress0 / 4 steps
1
Create the word and dictionary
Create a variable called word and set it to the string "applepen". Then create a variable called dictionary and set it to the array ["apple", "pen"].
DSA Javascript
Hint
Use const to create variables. The dictionary is an array of strings.
2
Create the canBreak variable
Create a variable called canBreak and set it to false.
DSA Javascript
Hint
Use let because canBreak will change later.
3
Check if the word can be broken
Use a for loop with variable i from 1 to word.length. Inside the loop, check if dictionary.includes(word.substring(0, i)) is true and dictionary.includes(word.substring(i)) is true. If both are true, set canBreak to true.
DSA Javascript
Hint
Use substring(0, i) for the first part and substring(i) for the second part.
4
Print the result
Write console.log(canBreak) to print if the word can be broken into dictionary words.
DSA Javascript
Hint
Use console.log(canBreak) to show the result.
Practice
(1/5)
1. What does the Word Break Problem ask you to determine about a given string s and a dictionary of words wordDict?
easy
A. If s contains any substring from wordDict
B. If s can be segmented into a space-separated sequence of one or more dictionary words
C. If s is exactly equal to any word in wordDict
D. If s can be reversed to form a word in wordDict
Solution
Step 1: Understand the problem statement
The Word Break Problem asks whether the entire string s can be split into parts where each part is a word from the dictionary wordDict.
Step 2: Compare options with the problem definition
If s can be segmented into a space-separated sequence of one or more dictionary words correctly states the problem as checking if s can be segmented into dictionary words. Other options describe partial or different checks.
Final Answer:
If s can be segmented into a space-separated sequence of one or more dictionary words -> Option B
Quick Check:
Word Break Problem = segmentation check [OK]
Hint: Remember: Word Break means full segmentation check [OK]
Common Mistakes:
Thinking it checks for substring presence only
Confusing exact match with segmentation
Assuming reversal or partial matches
2. Which of the following is the correct way to declare a function named wordBreak in JavaScript that takes two parameters: s (string) and wordDict (array)?
easy
A. function wordBreak[s, wordDict] {}
B. def wordBreak(s, wordDict): {}
C. func wordBreak(s, wordDict) {}
D. function wordBreak(s, wordDict) {}
Solution
Step 1: Recall JavaScript function syntax
In JavaScript, functions are declared using the function keyword followed by the name and parentheses enclosing parameters.
Step 2: Check each option's syntax
function wordBreak(s, wordDict) {} uses correct JavaScript syntax. def wordBreak(s, wordDict): {} is Python syntax. func wordBreak(s, wordDict) {} resembles Go syntax. function wordBreak[s, wordDict] {} uses incorrect brackets.
Final Answer:
function wordBreak(s, wordDict) {} -> Option D
Quick Check:
JS function syntax = function name(params) {} [OK]
Hint: JS functions use parentheses for parameters, not brackets [OK]
Common Mistakes:
Using Python or other language syntax
Using square brackets instead of parentheses
Missing function keyword
3. What will be the output of the following JavaScript code?
const s = "leetcode";
const wordDict = ["leet", "code"];
function wordBreak(s, wordDict) {
const dp = Array(s.length + 1).fill(false);
dp[0] = true;
for (let i = 1; i <= s.length; i++) {
for (let j = 0; j < i; j++) {
if (dp[j] && wordDict.includes(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length];
}
console.log(wordBreak(s, wordDict));
medium
A. undefined
B. false
C. true
D. TypeError
Solution
Step 1: Understand the dynamic programming array dp
dp[i] means if substring s[0..i-1] can be segmented. dp[0] = true means empty string is segmentable.
Step 2: Trace the loops and substring checks
For s = "leetcode", wordDict = ["leet", "code"], dp updates to true at dp[4] ("leet") and dp[8] ("leetcode") because both substrings are in wordDict.
Final Answer:
true -> Option C
Quick Check:
"leetcode" split as "leet" + "code" = true [OK]
Hint: Check dp array updates for substring matches [OK]
Common Mistakes:
Confusing substring indices
Not initializing dp[0] to true
Assuming partial matches are enough
4. The following code attempts to solve the Word Break Problem but has a bug. What is the bug?
function wordBreak(s, wordDict) {
const dp = Array(s.length).fill(false);
dp[0] = true;
for (let i = 1; i <= s.length; i++) {
for (let j = 0; j < i; j++) {
if (dp[j] && wordDict.includes(s.substring(j, i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length];
}
medium
A. dp array length is incorrect; should be s.length + 1
B. dp[0] should be false, not true
C. substring indices are reversed in s.substring(j, i)
D. wordDict.includes should be replaced with wordDict.indexOf
Solution
Step 1: Check dp array initialization
dp array length should be s.length + 1 to include dp[s.length] index. Current length s.length causes out-of-bound errors.
Step 2: Verify dp usage and return statement
dp[s.length] is accessed at return, but dp array does not have that index, causing undefined or error.
Final Answer:
dp array length is incorrect; should be s.length + 1 -> Option A
Quick Check:
dp length = s.length + 1 for full coverage [OK]
Hint: dp array must cover from 0 to s.length inclusive [OK]
Common Mistakes:
Using dp length equal to s.length only
Misunderstanding dp index meaning
Ignoring off-by-one errors
5. Given the string s = "applepenapple" and dictionary wordDict = ["apple", "pen"], which of the following modifications to the Word Break algorithm will allow it to return true only if all possible segmentations of s are valid dictionary words (not just one)?
hard
A. Change dp to store counts of valid segmentations and check if count equals total segmentations
B. Return true as soon as one valid segmentation is found (current approach)
C. Use a stack to store all substrings and check each against wordDict once
D. Sort wordDict and use binary search for substring checks
Solution
Step 1: Understand current algorithm behavior
The current algorithm returns true if at least one segmentation exists. It does not check all segmentations.
Step 2: Modify dp to count all valid segmentations
By storing counts of valid segmentations at each dp index, we can compare total segmentations to valid ones. Returning true only if all segmentations are valid requires counting and comparing.
Final Answer:
Change dp to store counts of valid segmentations and check if count equals total segmentations -> Option A
Quick Check:
Counting all segmentations ensures all are valid [OK]
Hint: Count all segmentations, not just existence, for full validation [OK]
Common Mistakes:
Assuming one valid segmentation means all are valid
Ignoring need to track all segmentation paths
Confusing substring search optimization with segmentation count
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.