13
for (int i = 0; i < 26; i++) child[i] = NULL;17
Trie *root = new Trie();19
void insert(string &word) {22
for (int i = 0; i < word.size(); i++) {23
int index = word[i] - 'a';25
if (!curr->child[index]) curr->child[index] = new Trie();27
curr = curr->child[index];30
curr->isEndOfWord = true;34
void trieSearchDFS(vector<vector<char>> &board, Trie *curr, int i, int j, int row, int col) {35
if (i < 0 || i > row || j < 0 || j > col || board[i][j] == '@') return;37
// int index = board[i][j]-'a';38
curr = curr->child[board[i][j] - 'a'];40
if (curr == NULL) return;42
if (curr->isEndOfWord) {43
result.push_back(curr->str);44
curr->isEndOfWord = false;47
char ch = board[i][j];50
if (i - 1 >= 0) trieSearchDFS(board, curr, i - 1, j, row, col);51
if (j + 1 < col) trieSearchDFS(board, curr, i, j + 1, row, col);52
if (i + 1 < row) trieSearchDFS(board, curr, i + 1, j, row, col);53
if (j - 1 >= 0) trieSearchDFS(board, curr, i, j - 1, row, col);58
vector<string> findWords(vector<vector<char>> &board, vector<string> &words) {59
int row = board.size();60
int col = board[0].size();62
for (int i = 0; i < words.size(); i++) insert(words[i]);64
for (int i = 0; i < row; i++) {65
for (int j = 0; j < col; j++) {66
trieSearchDFS(board, root, i, j, row, col);