题目:
题解:
class Solution {
public:struct Node{int id;Node* son[26];Node(){id = -1;for(int i = 0; i < 26; i++) son[i] = NULL;}}* root;vector<vector<char>> g;unordered_set<int> ids;vector<string> res;int dx[4] = {1, -1, 0, 0}, dy[4] = {0, 0, 1, -1};vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {g = board;root = new Node();for(int i = 0; i < words.size(); i++) {string wd = words[i];auto p = root;for(auto c: wd){int i = c - 'a';if(!p->son[i]) p->son[i] = new Node();p = p->son[i];}p->id = i;}for(int i = 0; i < board.size(); i++)for(int j = 0; j < board[0].size(); j++){int u = g[i][j] - 'a';if(root->son[u]) {dfs(i, j, root->son[u]);}}for(auto id: ids) res.push_back(words[id]); return res;}void dfs(int x, int y, Node* root){if(root->id != -1) ids.insert(root->id);int c = g[x][y];g[x][y] = '.';for(int i = 0; i < 4; i++){int a = x + dx[i], b = y + dy[i];if(a < 0 || a >= g.size() || b < 0 || b >= g[0].size() || g[a][b] == '.' ) continue;int u = g[a][b] - 'a';if(root->son[u]) dfs(a, b, root->son[u]);}g[x][y] = c;}
};