Skip to content

Commit 9e2396d

Browse files
committed
solve: W04 word search
1 parent 3d1166a commit 9e2396d

File tree

1 file changed

+45
-0
lines changed

1 file changed

+45
-0
lines changed

word-search/eunice-hong.ts

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
2+
/**
3+
* Time Complexity: O(m * n * 4^k)
4+
* Space Complexity: O(m * n)
5+
*/
6+
function exist(board: string[][], word: string): boolean {
7+
// Initialize the board dimensions
8+
const m = board.length;
9+
const n = board[0].length;
10+
11+
const dfs = (i: number, j: number, index: number): boolean => {
12+
// If we've matched all characters, return true
13+
if (index === word.length) return true;
14+
// If out of bounds or current character doesn't match, return false
15+
if (i < 0 || i >= m || j < 0 || j >= n || board[i][j] !== word[index]) return false;
16+
17+
// Temporarily mark the current cell as visited
18+
const temp = board[i][j];
19+
board[i][j] = '#';
20+
21+
// Explore all four possible directions
22+
const found =
23+
dfs(i + 1, j, index + 1) ||
24+
dfs(i - 1, j, index + 1) ||
25+
dfs(i, j + 1, index + 1) ||
26+
dfs(i, j - 1, index + 1);
27+
28+
// Unmark the current cell (backtracking)
29+
board[i][j] = temp;
30+
31+
// Return true if we found the word
32+
return found;
33+
};
34+
35+
// Iterate through each cell in the board
36+
for (let i = 0; i < m; i++) {
37+
for (let j = 0; j < n; j++) {
38+
// Start DFS from each cell
39+
if (dfs(i, j, 0)) return true;
40+
}
41+
}
42+
43+
// If we didn't find the word, return false
44+
return false;
45+
}

0 commit comments

Comments
 (0)