当前位置:网站首页>力扣练习——单词搜索
力扣练习——单词搜索
2022-08-02 04:18:00 【qq_43403657】
单词搜索
1.问题描述
给定一个二维网格和一个单词,找出该单词是否存在于网格中。
单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。
示例:
board =
[
[‘A’,‘B’,‘C’,‘E’],
[‘S’,‘F’,‘C’,‘S’],
[‘A’,‘D’,‘E’,‘E’]
]
给定 word = “ABCCED”, 返回 true
给定 word = “SEE”, 返回 true
给定 word = “ABCB”, 返回 false
可使用以下main函数:
int main()
{
vector<vector<char> > board;
string word;
int m,n;
cin>>m;
cin>>n;
char ch;
for(int i=0; i<m; i++)
{
vector<char> aLine;
for(int j=0; j<n; j++)
{
cin>>ch;
aLine.push_back(ch);
}
board.push_back(aLine);
}
cin>>word;
bool res=Solution().exist(board,word);
cout<<(res?"true":"false")<<endl;
return 0;
}
2.输入说明
首先输入board的行数m、列数n,
然后输入m行,每行n个大写或小写英文字母。
最后输入一个单词word,长度在1到100之间,只包含大写和小写英文字母。
1 <= m <= 80
1 <= n <= 80
3.输出说明
输出true或false
4.范例
输入
3 4
ABCE
SFCS
ADEE
ABCCED
输出
true
5.代码
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
using namespace std;
//回溯
//board为给定的字符矩阵,map记录当前字符是否访问过,word用来表示目标字符串,index表示当前访问的word下标
bool backtrack(vector<vector<char>>& board, vector<vector<int>>& map, string word, int i, int j, int index) {
//判断下标是否正常,是否已经遍历过,对应的字符是否匹配
if (i < 0 || i == board.size() || j < 0 || j == board[0].size() || map[i][j] || board[i][j] != word[index]) return false;
//遍历到字符串word结尾,并且对应的字符依然匹配
if (index == word.size() - 1 && word[index] == board[i][j]) return true;
map[i][j] = 1;//标记该位置已经访问过
//进行上下左右四个方位相邻点的访问
if (backtrack(board, map, word, i, j - 1, index + 1) ||
backtrack(board, map, word, i - 1, j, index + 1) ||
backtrack(board, map, word, i, j + 1, index + 1) ||
backtrack(board, map, word, i + 1, j, index + 1))
return true;
//回溯到上一种情况
map[i][j] = 0;
return false;
}
bool exist(vector<vector<char> > &board, string word)
{
int row = board.size();//行数
int column = board[0].size();//列数
//注意二维数组的初始化方法
vector<vector<int> >map(row, vector<int>(column,0));//定义访问map初始值均为0
for (int i = 0; i < row; i++)
{
for (int j = 0; j < column; j++)
{
if (backtrack(board, map, word, i, j, 0))
return true;
}
}
return false;
}
int main()
{
vector<vector<char> > board;
string word;
int m, n;
cin >> m;
cin >> n;
char ch;
for (int i = 0; i < m; i++)
{
vector<char> aLine;
for (int j = 0; j < n; j++)
{
cin >> ch;
aLine.push_back(ch);
}
board.push_back(aLine);
}
cin >> word;
bool res = exist(board, word);
cout << (res ? "true" : "false") << endl;
return 0;
}
6.新知识点
vector<vector<int> >map(row, vector<int>(column,0));//定义访问map初始值均为0
//其中row表示行数,column表示列数
边栏推荐
猜你喜欢

W25Q16 存储器(Flash)

“数字化重构系统,搞定 CEO 是第一步”

Reinforcement Learning (Chapter 16 of the Watermelon Book) Mind Map

Excel skills daquan

alibaba数据同步组件canal的实践整理

论文速读:Homography Loss for Monocular 3D Object Detection

数学建模学习(76):多目标线性规划模型(理想法、线性加权法、最大最小法),模型敏感性分析

线代005

Qt编写物联网管理平台49-设备模拟工具

Batch normalization (BN) based on deep learning
随机推荐
不会多线程还想进 BAT?精选 19 道多线程面试题,有答案边看边学
Arduino框架下 ESP32看门狗使用示例
PyQt5_pyqtgraph鼠标在折线图上画方形
UI自动化测试框架搭建——标记性能较差用例
Minecraft 1.18.1、1.18.2模组开发 23.3D动画盔甲制作
8月1日“海豹数藏”将全网首发民族英雄林则徐《四行行书》数字藏品!
Batch normalization (BN) based on deep learning
论人生自动化
复制延迟案例(3)-单调读
爬虫_爬取wasde月度供需平衡表(实例)
Scientific research notes (5) SLAC WiFi Fingerprint+ Step counter fusion positioning
互动投影墙深受展览展示喜爱的原因分析
Line generation 005
Minecraft 1.18.1, 1.18.2 module development 23.3D animation armor production
一次跳出最外层循环
2022 Huawei Software Elite Challenge (Preliminary) - Summary
Scala基础【常用方法补充、模式匹配】
micro-ros arduino esp32 ros2 笔记
A practice arrangement about map GIS (below) GIS practice of Redis
吴恩达机器学习系列课程笔记——第七章:正则化(Regularization)