当前位置:网站首页>力扣(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;
}
};
边栏推荐
- The Principle Of Percona Toolkit Nibble Algorithm
- Weekly Summary (*67): Why not dare to express an opinion
- PMP 项目沟通管理
- Summary of mobile page optimization in seconds
- 【愚公系列】2022年07月 Go教学课程 023-Go容器之列表
- Flutter Tutorial 02 Introduction to Flutter Desktop Program Development Tutorial Run hello world (tutorial includes source code)
- 25. 这三道常见的面试题,你有被问过吗?
- 动态规划 01背包
- typescript20-接口
- 【无标题】
猜你喜欢

Progressive Reconstruction of Visual Structure for Image Inpainting 论文笔记

【无标题】

typescript26 - literal types

【愚公系列】2022年07月 Go教学课程 023-Go容器之列表

Unknown Bounded Array
![[kali-information collection] enumeration - DNS enumeration: DNSenum, fierce](/img/97/bbe7c2af0ff8bcb5222b9105d80c73.png)
[kali-information collection] enumeration - DNS enumeration: DNSenum, fierce

MLP neural network, GRNN neural network, SVM neural network and deep learning neural network compare and identify human health and non-health data

Software Testing Interview (3)

This article takes you to understand the past and present of Mimir, Grafana's latest open source project

微软 Win10 照片磁贴后的又一“刺客”,谷歌 Chrome 浏览器将在新标签页展示用户照片
随机推荐
高数 | 【重积分】线面积分880例题
7月编程排行榜来啦!这次有何新变化?
Flink 1.13 (8) CDC
MySQL4
Optional parameters typescript19 - object
Invalid classes inferred from unique values of `y`. Expected: [0 1 2], got [1 2 3]
TIM登陆时提示00001(TIM00001)
Risk strategy important steps of tuning method
Progressive Reconstruction of Visual Structure for Image Inpainting 论文笔记
The maximum quantity leetcode6133. Grouping (medium)
Introduction to the Elastic Stack
【愚公系列】2022年07月 .NET架构班 085-微服务专题 Abp vNext微服务网关
typescript28 - value of enumeration type and data enumeration
In the shake database, I want to synchronize the data of the source db0 to the destination db5, how to set the parameters?
Difference Between Compiled and Interpreted Languages
UE4 rays flashed from mouse position detection
Input input box cursor automatically jumps to the last bug after the previous input
button remove black frame
最新 955 不加班的公司名单
Hackers can how bad to what degree?