Word Search II
来源:互联网 发布:linux系统命令及shell 编辑:程序博客网 时间:2024/05/16 20:28
题目地址:点击打开链接
前缀树缓存词组,然后用DFS搜索
class Solution {public: Solution():root(new TrieNode()){} vector<string> findWords(vector<vector<char>>& board, vector<string>& words) { vs.clear(); m=board.size(); if(m==0)return vs; n=board[0].size(); if(n==0)return vs; for(int i=0;i<words.size();++i)insert(words[i]); visited=vector<vector<bool>>(m,vector<bool>(n,false)); for(int i=0;i<m;++i){ for(int j=0;j<n;++j){ if(root->children[board[i][j]-'a']!=NULL){ dfs(board,i,j,string()+board[i][j],root->children[board[i][j]-'a']); } } } return vs; }private: //Trie struct TrieNode{ bool isLeaf; TrieNode* children[26]; TrieNode():isLeaf(false){ for(int i=0;i<26;++i)children[i]=NULL; } }; TrieNode *root; void insert(string word){ TrieNode *p=root; for(int i=0;i<word.size();++i){ if(p->children[word[i]-'a']==NULL){ p->children[word[i]-'a']=new TrieNode(); } p=p->children[word[i]-'a']; } p->isLeaf=true; } //board dfs int m,n; vector<string> vs; vector<vector<bool>> visited; void dfs(vector<vector<char>>& board,int a,int b,string str,TrieNode *rt) { visited[a][b]=true; if(rt->isLeaf){ vs.push_back(str); rt->isLeaf=false; } int mm[4][2]={-1,0,1,0,0,1,0,-1}; for(int i=0;i<4;++i){ int x=mm[i][0]+a; int y=mm[i][1]+b; if(x>=0&&x<m&&y>=0&&y<n&&!visited[x][y]&&rt->children[board[x][y]-'a']!=NULL){ dfs(board,x,y,str+board[x][y],rt->children[board[x][y]-'a']); } } visited[a][b]=false; }};
0 0
- LeetCode Word Search II
- leetcode212:Word Search II
- Leetcode212-Word Search II
- [leetcode] Word Search II
- LeetCode Word Search II
- leetcode Word Search II
- Word Search II
- Word Search II
- LeetCode - Word Search II
- Word Search II
- [leetcode]Word Search II
- word search II
- Word Search II
- leetcode Word Search II
- Leetcode -- Word Search II
- [LeetCode212] Word Search II
- LeetCode Word Search II
- Leetcode @ Word Search II
- 2015_07_20_正式踏入ACM
- Windows/Linux环境下模拟服务端口方法
- 修改任务栏的任务按钮(任务栏标签)的显示宽度
- 将ppt转成pdf合适的转换器
- 程序员的能力拓展模型
- Word Search II
- JS的基础类型与引用类型
- UVA140 - Bandwidth
- 常用函数(二)在现有元素后插入新的元素
- Twemproxy源码分析之一 入口函数及启动过程
- mybatis 源码系列 组件之 plugin
- OFDM之交织器/解交织器IP核调用
- 【PHP学习】数组
- 查找算法小结