Bird
Raised Fist0
DSA Typescriptprogramming~30 mins

Word Search in Grid Using Backtracking in DSA Typescript - Build from Scratch

Choose your learning style10 modes available
Word Search in Grid Using Backtracking
📖 Scenario: You are building a simple word search puzzle solver. The puzzle is a grid of letters, and you want to find if a given word exists in the grid by moving horizontally or vertically to adjacent letters.This is like searching for a hidden word in a crossword puzzle.
🎯 Goal: Build a program that checks if a given word can be found in the letter grid by moving up, down, left, or right, without revisiting the same cell twice.
📋 What You'll Learn
Create a 2D array called board with exact letters
Create a string variable called word with the exact word to search
Write a function exist that returns true if the word is found in the board, else false
Use backtracking to explore possible paths in the grid
Print the result of exist(board, word)
💡 Why This Matters
🌍 Real World
Word search puzzles and games often require searching for words hidden in grids of letters. This technique helps solve or generate such puzzles.
💼 Career
Backtracking and grid traversal are common in technical interviews and real-world problems like pathfinding, puzzle solving, and game development.
Progress0 / 4 steps
1
Create the letter grid
Create a 2D array called board with these exact rows: ['A', 'B', 'C', 'E'], ['S', 'F', 'C', 'S'], ['A', 'D', 'E', 'E']
DSA Typescript
Hint

Use a constant variable board and assign a 2D array with the exact letters as rows.

2
Set the word to search
Create a string variable called word and set it to the exact value 'ABCCED'
DSA Typescript
Hint

Use const word: string = 'ABCCED'; to set the word.

3
Write the backtracking function to find the word
Write a function called exist that takes board: string[][] and word: string and returns true if the word exists in the board by moving horizontally or vertically. Use backtracking with a helper function dfs inside exist. Use variables rows, cols, and a 2D boolean array visited to track visited cells. Use for loops and recursion to explore neighbors.
DSA Typescript
Hint

Use a helper function dfs inside exist to explore neighbors recursively. Mark cells visited before recursion and unmark after.

4
Print the result of the word search
Write a console.log statement to print the result of calling exist(board, word)
DSA Typescript
Hint

Use console.log(exist(board, word)); to print the result.

Practice

(1/5)
1. What is the main purpose of backtracking in the Word Search problem on a grid?
easy
A. To sort the grid alphabetically
B. To explore all possible paths to find the word
C. To count the number of words in the grid
D. To replace characters in the grid

Solution

  1. Step 1: Understand backtracking role

    Backtracking tries all possible paths from each cell to find the target word.
  2. Step 2: Eliminate other options

    Sorting, counting, or replacing characters are unrelated to backtracking in word search.
  3. Final Answer:

    To explore all possible paths to find the word -> Option B
  4. Quick Check:

    Backtracking = Explore paths [OK]
Hint: Backtracking means trying all paths step-by-step [OK]
Common Mistakes:
  • Thinking backtracking sorts or counts
  • Confusing backtracking with simple search
  • Ignoring path exploration in grid
2. Which of the following TypeScript function signatures correctly represents a backtracking helper for word search in a grid?
easy
A. function backtrack(grid: string[][], word: string, row: number, col: number, index: number): boolean
B. function backtrack(grid: number[], word: string): void
C. function backtrack(word: string, grid: string[][]): number
D. function backtrack(grid: string[][], word: string): string

Solution

  1. Step 1: Identify correct parameters

    The helper needs the grid, the word, current position (row, col), and index in word to track progress.
  2. Step 2: Check return type

    It returns boolean to indicate if word is found along the path.
  3. Final Answer:

    function backtrack(grid: string[][], word: string, row: number, col: number, index: number): boolean -> Option A
  4. Quick Check:

    Correct params and boolean return = function backtrack(grid: string[][], word: string, row: number, col: number, index: number): boolean [OK]
Hint: Helper needs grid, position, index, returns boolean [OK]
Common Mistakes:
  • Missing row and col parameters
  • Wrong return type (void or number)
  • Incorrect parameter order
3. What will be the output of the following TypeScript code snippet?
const board = [
  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']
];

function exist(board: string[][], word: string): boolean {
  const rows = board.length;
  const cols = board[0].length;

  function backtrack(r: number, c: number, i: number): boolean {
    if (i === word.length) return true;
    if (r < 0 || c < 0 || r >= rows || c >= cols || board[r][c] !== word[i]) return false;

    const temp = board[r][c];
    board[r][c] = '#';

    const found = backtrack(r+1, c, i+1) || backtrack(r-1, c, i+1) || backtrack(r, c+1, i+1) || backtrack(r, c-1, i+1);

    board[r][c] = temp;
    return found;
  }

  for (let r = 0; r < rows; r++) {
    for (let c = 0; c < cols; c++) {
      if (backtrack(r, c, 0)) return true;
    }
  }
  return false;
}

console.log(exist(board, 'ABCCED'));
medium
A. SyntaxError
B. false
C. true
D. undefined

Solution

  1. Step 1: Understand the board and word

    The word 'ABCCED' can be found by moving right and down in the grid starting at (0,0).
  2. Step 2: Trace backtracking calls

    Backtracking marks visited cells and explores neighbors; it finds the word successfully and returns true.
  3. Final Answer:

    true -> Option C
  4. Quick Check:

    Word found in grid = true [OK]
Hint: Trace path for word in grid; returns true if found [OK]
Common Mistakes:
  • Assuming word is not found
  • Ignoring visited cell marking
  • Confusing return values
4. Identify the bug in this backtracking function for word search and select the fix:
function backtrack(r: number, c: number, i: number): boolean {
  if (i === word.length) return true;
  if (r < 0 || c < 0 || r >= rows || c >= cols) return false;
  if (board[r][c] !== word[i]) return false;

  board[r][c] = '#';

  const found = backtrack(r+1, c, i+1) || backtrack(r-1, c, i+1) || backtrack(r, c+1, i+1) || backtrack(r, c-1, i+1);

  return found;
}
medium
A. Restore board[r][c] to original after recursive calls
B. Change base case to i > word.length
C. Remove boundary checks
D. Return false immediately after marking cell

Solution

  1. Step 1: Identify missing restoration

    The function marks board[r][c] as '#' but never restores it after recursion, corrupting the grid.
  2. Step 2: Fix by restoring cell

    After recursive calls, restore board[r][c] to original character to allow other paths to use it.
  3. Final Answer:

    Restore board[r][c] to original after recursive calls -> Option A
  4. Quick Check:

    Restore cell after recursion = Restore board[r][c] to original after recursive calls [OK]
Hint: Always restore grid cell after backtracking recursion [OK]
Common Mistakes:
  • Forgetting to restore visited cells
  • Changing base case incorrectly
  • Removing necessary boundary checks
5. Given a 4x4 grid and a list of words, how would you efficiently find all words present using backtracking? Choose the best approach.
hard
A. Replace all grid letters with '#' before searching
B. Run backtracking separately for each word on the entire grid
C. Sort words alphabetically and search only the first word
D. Use a Trie to store words and backtrack once to find all matches

Solution

  1. Step 1: Understand inefficiency of separate searches

    Running backtracking for each word separately repeats work and is slow for many words.
  2. Step 2: Use Trie with backtracking

    Building a Trie of all words allows one backtracking pass to find all words efficiently by pruning invalid paths early.
  3. Final Answer:

    Use a Trie to store words and backtrack once to find all matches -> Option D
  4. Quick Check:

    Trie + single backtracking = efficient search [OK]
Hint: Combine Trie with backtracking for multiple words [OK]
Common Mistakes:
  • Searching each word separately wastes time
  • Sorting words doesn't help search
  • Modifying grid destructively before search
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