Bird
Raised Fist0
DSA C++programming~5 mins

Word Break Problem in DSA C++ - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is the Word Break Problem?
It is a problem where you check if a given string can be split into a sequence of dictionary words.
Click to reveal answer
beginner
What data structure is commonly used to store the dictionary in the Word Break Problem?
A hash set or unordered set is commonly used for fast lookup of dictionary words.
Click to reveal answer
intermediate
Explain the dynamic programming approach for the Word Break Problem.
Use a boolean array where each position indicates if the substring up to that position can be segmented. Update it by checking all prefixes and dictionary membership.
Click to reveal answer
intermediate
What is the time complexity of the dynamic programming solution for the Word Break Problem?
The time complexity is O(n^3) in the worst case, where n is the length of the string, due to checking all substrings and dictionary lookups.
Click to reveal answer
intermediate
Why is memoization useful in the Word Break Problem?
Memoization stores results of subproblems to avoid repeated work, improving efficiency especially in recursive solutions.
Click to reveal answer
What does the Word Break Problem ask you to determine?
AIf a string can be segmented into dictionary words
BIf a string contains only vowels
CIf a string is a palindrome
DIf a string contains digits
Which data structure is best for quick dictionary word lookup?
AArray
BHash set
CLinked list
DStack
In dynamic programming for Word Break, what does dp[i] represent?
AIf substring s[0..i-1] can be segmented
BLength of the longest word
CNumber of dictionary words
DIndex of last word
What is the main benefit of memoization in recursive Word Break solutions?
AReduces memory usage
BSorts the dictionary
CAvoids repeated calculations
DIncreases recursion depth
Which of these is NOT a step in the dynamic programming solution for Word Break?
AInitialize dp array with false
BCheck all prefixes for dictionary membership
CUse dp to store segmentation results
DSort the input string
Describe how you would solve the Word Break Problem using dynamic programming.
Think about building the solution from smaller substrings.
You got /4 concepts.
    Explain why memoization improves the recursive solution for the Word Break Problem.
    Consider what happens when the same substring is checked multiple times.
    You got /3 concepts.

      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 is exactly equal to one of the words in wordDict
      B. If s contains any substring from wordDict
      C. If s can be segmented into a space-separated sequence of one or more dictionary words
      D. If s is a palindrome formed by dictionary words

      Solution

      1. Step 1: Understand the problem statement

        The Word Break Problem asks if the entire string s can be split into parts where each part is a word from the dictionary wordDict.
      2. Step 2: Differentiate from similar concepts

        It is not enough for s to contain a dictionary word or be equal to one; the whole string must be fully segmented into dictionary words.
      3. Final Answer:

        If s can be segmented into a sequence of dictionary words -> Option C
      4. Quick Check:

        Word Break = Full segmentation check [OK]
      Hint: Check if full string splits into dictionary words [OK]
      Common Mistakes:
      • Thinking partial substring match is enough
      • Confusing exact match with segmentation
      • Ignoring the order of words in segmentation
      2. Which of the following is the correct C++ syntax to declare a function named wordBreak that takes a string s and a vector<string> named wordDict and returns a bool?
      easy
      A. bool wordBreak(string s, vector<string> &wordDict);
      B. bool wordBreak(string s, vector<string>& wordDict);
      C. bool wordBreak(string s, vector<string> wordDict);
      D. bool wordBreak(string s, vector<string> wordDict&);

      Solution

      1. Step 1: Understand parameter passing in C++

        Passing vector<string> by reference requires the ampersand & after the type, with optional space before the variable name.
      2. Step 2: Check syntax correctness

        bool wordBreak(string s, vector<string> &wordDict); correctly places the ampersand before the parameter name with a space: vector<string> &wordDict. bool wordBreak(string s, vector<string>& wordDict); is also valid but less common spacing. bool wordBreak(string s, vector<string> wordDict&); is invalid syntax.
      3. Final Answer:

        bool wordBreak(string s, vector<string> &wordDict); -> Option A
      4. Quick Check:

        Reference parameter syntax = bool wordBreak(string s, vector<string> &wordDict); [OK]
      Hint: Ampersand & goes between type and variable name [OK]
      Common Mistakes:
      • Placing & after variable name incorrectly
      • Missing semicolon at function declaration
      • Using invalid syntax like wordDict&
      3. What is the output of the following C++ code snippet?
      bool wordBreak(string s, vector<string> &wordDict) {
          unordered_set<string> dict(wordDict.begin(), wordDict.end());
          vector<bool> dp(s.size() + 1, false);
          dp[0] = true;
          for (int i = 1; i <= s.size(); i++) {
              for (int j = 0; j < i; j++) {
                  if (dp[j] && dict.count(s.substr(j, i - j))) {
                      dp[i] = true;
                      break;
                  }
              }
          }
          return dp[s.size()];
      }
      
      int main() {
          string s = "leetcode";
          vector<string> wordDict = {"leet", "code"};
          cout << (wordBreak(s, wordDict) ? "true" : "false") << endl;
          return 0;
      }
      medium
      A. true
      B. false
      C. Compilation error
      D. Runtime error

      Solution

      1. Step 1: Understand the dynamic programming logic

        The code uses a boolean vector dp where dp[i] is true if substring s[0..i-1] can be segmented into dictionary words. It initializes dp[0] as true (empty string).
      2. Step 2: Trace the example input "leetcode" with dictionary ["leet", "code"]

        At i=4, substring "leet" is in dictionary, so dp[4] = true. At i=8, substring "code" is in dictionary and dp[4] is true, so dp[8] = true. Finally, dp[s.size()] = true.
      3. Final Answer:

        true -> Option A
      4. Quick Check:

        DP segmentation confirms full string = true [OK]
      Hint: Check dp array for full string index true [OK]
      Common Mistakes:
      • Confusing substring indices
      • Forgetting to break inner loop after true
      • Misunderstanding dp initialization
      4. Identify the bug in the following C++ code for the Word Break Problem:
      bool wordBreak(string s, vector<string> &wordDict) {
          unordered_set<string> dict(wordDict.begin(), wordDict.end());
          vector<bool> dp(s.size(), false);
          dp[0] = true;
          for (int i = 1; i <= s.size(); i++) {
              for (int j = 0; j < i; j++) {
                  if (dp[j] && dict.count(s.substr(j, i - j))) {
                      dp[i] = true;
                      break;
                  }
              }
          }
          return dp[s.size()];
      }
      medium
      A. dp[0] should be initialized to false
      B. dp vector size should be s.size() + 1, not s.size()
      C. The substring indices in s.substr are incorrect
      D. unordered_set should be a vector instead

      Solution

      1. Step 1: Check dp vector size and indexing

        The dp vector is sized to s.size(), but the code accesses dp[s.size()] which is out of bounds. It should be sized s.size() + 1 to include the base case for empty substring.
      2. Step 2: Verify other parts

        unordered_set usage and substring indices are correct. dp[0] must be true to represent empty string segmentation.
      3. Final Answer:

        dp vector size should be s.size() + 1, not s.size() -> Option B
      4. Quick Check:

        dp size off by one causes runtime error [OK]
      Hint: dp size = string length + 1 for base case [OK]
      Common Mistakes:
      • Using dp size equal to string length only
      • Misinitializing dp[0] to false
      • Confusing substring parameters
      5. Given the string s = "applepenapple" and dictionary wordDict = ["apple", "pen"], which of the following modifications to the Word Break algorithm allows it to also return the actual segmented sentence "apple pen apple" instead of just true or false?
      hard
      A. Use a stack to store indices and print words in reverse order after DP
      B. Return the count of possible segmentations instead of a boolean
      C. Modify the dictionary to include spaces between words
      D. Use a vector of strings to store sentences at each index and build them during DP

      Solution

      1. Step 1: Understand the limitation of boolean DP

        The standard Word Break DP returns only true/false indicating if segmentation is possible, but does not store the actual segmented sentences.
      2. Step 2: Modify DP to store sentences

        By using a vector of strings at each dp index, we can store all possible sentences formed up to that index. When a valid word is found, append it to sentences from previous indices.
      3. Step 3: Final answer

        This approach allows reconstructing the segmented sentence like "apple pen apple".
      4. Final Answer:

        Use a vector of strings to store sentences at each index and build them during DP -> Option D
      5. Quick Check:

        Store sentences in DP to reconstruct output [OK]
      Hint: Store sentences in DP array to reconstruct segmentation [OK]
      Common Mistakes:
      • Trying to modify dictionary words
      • Returning count instead of sentences
      • Using stack without DP sentence storage
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard