当前位置:网站首页>leetcode: 212. Word Search II
leetcode: 212. Word Search II
2022-08-04 14:36:00 【OceanStar study notes】
题目来源
题目描述
题目解析
前缀和 + DFS
注意:
- 可能出现: hf、 hfks(易错点)
class Solution {
struct TrieNode{
int size; // 可能出现不止一次
std::string path;
std::vector<TrieNode *> children;
TrieNode() : size(0), children(26, NULL){
}
};
void add(TrieNode *root, std::string &word){
TrieNode *node = root;
for(char ch : word){
int idx = ch - 'a';
if(node->children[idx] == nullptr){
node->children[idx] = new TrieNode();
}
node = node->children[idx];
}
node->size ++;
node->path = word;
}
std::set<std::string> set;
bool process(vector<vector<char>>& board, int i, int j, TrieNode *node){
int N = board.size(), M = board[0].size();
if(i < 0 || j < 0 || i == N || j == M || board[i][j] == 0 || node->children[ board[i][j] - 'a'] == nullptr){
return false;
}
int idx = board[i][j] - 'a';
node = node->children[idx];
if(node->size > 0){
node->size--; // 易错点......
set.emplace(node->path);
} //可能还没有结束,不能提前返回
board[i][j] = 0;
bool ans = false;
if(process(board, i + 1, j, node)
|| process(board, i - 1, j, node)
|| process(board, i, j + 1, node)
|| process(board, i, j - 1, node)){
ans = true;
}
board[i][j] = idx + 'a';
return ans;
}
public:
vector<string> findWords(vector<vector<char>>& board, vector<string>& words) {
TrieNode *root = new TrieNode();
for(auto w : words){
add(root, w);
}
for (int i = 0; i < board.size(); ++i) {
for (int j = 0; j < board[i].size(); ++j) {
TrieNode *node = root;
process(board, i, j, node);
}
}
return std::vector<std::string> (set.begin(), set.end());
}
};
边栏推荐
- leetcode:250. 统计同值子树
- 自监督学习未来是掩码自编码器?KAIST最新《自监督学习掩码自编码器》研究进展
- CF1527D MEX Tree (mex & tree & inclusive)
- Oracle 数据库用户创建、重启、导入导出
- [深入研究4G/5G/6G专题-50]: URLLC-16-《3GPP URLLC相关协议、规范、技术原理深度解读》-10-高可靠性技术-1-低编码率编码调制方案MCS与高可靠性DRB
- AlphaFold 如何实现 AI 在结构生物学中的全部潜力
- SLAM 04.视觉里程计-1-相机模型
- How to automatically renew the token after it expires?
- token 过期后,如何自动续期?
- 开发者独立搭建一个跨模态搜索应用有多难?
猜你喜欢
随机推荐
[Problem solving] QT update component appears "To continue this operation, at least one valid and enabled repository is required"
关于redis的几件小事(五)redis保证高并发以及高可用
职场漫谈:为什么越是内卷的行业越有人争着抢着往里冲?好奇怪的说...
G. Mountaineering Squad (violence & dfs)
四平方和,激光炸弹
手搓一个“七夕限定”,用3D Engine 5分钟实现烟花绽放效果
并发程序的隐藏杀手——假共享(False Sharing)
leetcode:254. 因子的组合
How to fall in love with a programmer
Oracle RAC环境下vip/public/private IP的区别
Android Sqlite3 basic commands
我爱七夕哈哈哈
SQL语句的写法:Update、Case、 Select 一起的用法
期货开户之前要谈好最低手续费和交返
C# 动态加载卸载 DLL
【北亚数据恢复】IBM System Storage存储lvm信息丢失数据恢复方案
字符串类的设计与实现_C语言字符串编程题
The Internet of things application development trend
没有Project Facets的解决方法
Theory 1: Deep Learning - Detailed Explanation of the LetNet Model