当前位置:网站首页>力扣(LeetCode)212. 单词搜索 II(2022.07.31)
力扣(LeetCode)212. 单词搜索 II(2022.07.31)
2022-08-01 04:36:00 【ChaoYue_miku】
给定一个 m x n 二维字符网格 board 和一个单词(字符串)列表 words, 返回所有二维网格上的单词 。
单词必须按照字母顺序,通过 相邻的单元格 内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母在一个单词中不允许被重复使用。
示例 1:
输入:board = [[“o”,“a”,“a”,“n”],[“e”,“t”,“a”,“e”],[“i”,“h”,“k”,“r”],[“i”,“f”,“l”,“v”]], words = [“oath”,“pea”,“eat”,“rain”]
输出:[“eat”,“oath”]
示例 2:
输入:board = [[“a”,“b”],[“c”,“d”]], words = [“abcb”]
输出:[]
提示:
m == board.length
n == board[i].length
1 <= m, n <= 12
board[i][j] 是一个小写英文字母
1 <= words.length <= 3 * 104
1 <= words[i].length <= 10
words[i] 由小写英文字母组成
words 中的所有字符串互不相同
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/word-search-ii
方法一:回溯+字典树
C++提交内容:
struct TrieNode {
string word;
unordered_map<char,TrieNode *> children;
TrieNode() {
this->word = "";
}
};
void insertTrie(TrieNode * root,const string & word) {
TrieNode * node = root;
for (auto c : word){
if (!node->children.count(c)) {
node->children[c] = new TrieNode();
}
node = node->children[c];
}
node->word = word;
}
class Solution {
public:
int dirs[4][2] = {
{
1, 0}, {
-1, 0}, {
0, 1}, {
0, -1}};
bool dfs(vector<vector<char>>& board, int x, int y, TrieNode * root, set<string> & res) {
char ch = board[x][y];
if (!root->children.count(ch)) {
return false;
}
root = root->children[ch];
if (root->word.size() > 0) {
res.insert(root->word);
}
board[x][y] = '#';
for (int i = 0; i < 4; ++i) {
int nx = x + dirs[i][0];
int ny = y + dirs[i][1];
if (nx >= 0 && nx < board.size() && ny >= 0 && ny < board[0].size()) {
if (board[nx][ny] != '#') {
dfs(board, nx, ny, root,res);
}
}
}
board[x][y] = ch;
return true;
}
vector<string> findWords(vector<vector<char>> & board, vector<string> & words) {
TrieNode * root = new TrieNode();
set<string> res;
vector<string> ans;
for (auto & word: words){
insertTrie(root,word);
}
for (int i = 0; i < board.size(); ++i) {
for (int j = 0; j < board[0].size(); ++j) {
dfs(board, i, j, root, res);
}
}
for (auto & word: res) {
ans.emplace_back(word);
}
return ans;
}
};
边栏推荐
猜你喜欢

认真对待每一个时刻

时时刻刻保持敬畏之心

出现Command ‘vim‘ is available in the following places,vim: command not found等解决方法

律师解读 | 枪炮还是玫瑰?从大厂之争谈元宇宙互操作性

TypeScript简化运行之ts-node

Weekly Summary (*67): Why not dare to express an opinion

C# | 使用Json序列化对象时忽略只读的属性
![[Getting Started Tutorial] Rollup Module Packager Integration](/img/1d/c6f1afe894b326be6939a7e8783972.jpg)
[Getting Started Tutorial] Rollup Module Packager Integration

MySQL4

typescript28 - value of enumeration type and data enumeration
随机推荐
6-23漏洞利用-postgresql代码执行利用
Game Theory (Depu) and Sun Tzu's Art of War (42/100)
TypeScript简化运行之ts-node
Flutter "Hello world" program code
Mysql基础篇(Mysql数据类型)
PMP 80个输入输出总结
【kali-信息收集】枚举——DNS枚举:DNSenum、fierce
Dart named parameter syntax
/etc/fstab
Write a method to flatten an array and deduplicate and sort it incrementally
Flink 1.13 (8) CDC
MySQL4
EntityFramework saves to SQLServer decimal precision is lost
Simple and easy to use task queue - beanstalkd
【云原生之kubernetes实战】kubernetes集群的检测工具——popeye
基于STM32设计的UNO卡牌游戏(双人、多人对战)
typescript22-接口继承
时时刻刻保持敬畏之心
August 22 Promotion Ambassador Extra Reward Rules
In the shake database, I want to synchronize the data of the source db0 to the destination db5, how to set the parameters?