当前位置:网站首页>Power button (LeetCode) 212. The word search II (2022.07.31)
Power button (LeetCode) 212. The word search II (2022.07.31)
2022-08-01 04:50: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;
}
};
边栏推荐
猜你喜欢

typescript26-字面量类型

风险策略调优中重要的三步分析法

数组问题之《下一个排列》、《旋转图像》以及二分查找之《搜索二维矩阵》

2022-07-31: Given a graph with n points and m directed edges, you can use magic to turn directed edges into undirected edges, such as directed edges from A to B, with a weight of 7.After casting the m

MySQL-DML语言-数据库操作语言-insert-update-delete-truncate

Pyspark机器学习:向量及其常用操作

typescript24-类型推论

typescript19-对象可选参数

(2022牛客多校四)D-Jobs (Easy Version)(三维前缀或)

UE4 模型OnClick事件不生效的两种原因
随机推荐
ICML2022 | Deep Dive into Permutation-Sensitive Graph Neural Networks
Game Theory (Depu) and Sun Tzu's Art of War (42/100)
Immutable
Dry goods!How to Construct SRv6-TE Performance Test Environment Using Instrumentation
PAT乙级 1002 写出这个数
scheduleWithFixedDelay和scheduleAtFixedRate的区别
FFmpeg 搭建本地屏幕录制环境
Excuse me, only primary key columns can be queried using sql in table storage. Does ots sql not support non-primary keys?
PMP 项目沟通管理
数组问题之《下一个排列》、《旋转图像》以及二分查找之《搜索二维矩阵》
动态规划 01背包
LeetCode 9. 回文数
MLP neural network, GRNN neural network, SVM neural network and deep learning neural network compare and identify human health and non-health data
(2022牛客多校四)D-Jobs (Easy Version)(三维前缀或)
一个往年的朋友
API Design Notes: The pimpl trick
MySQL-数据操作-分组查询-连接查询-子查询-分页查询-联合查询
This article takes you to understand the past and present of Mimir, Grafana's latest open source project
LeetCode 387. 字符串中的第一个唯一字符
怀念故乡的面条