要学习工控知识,就来工控小鑫。
农历十一月29th,2024 1:10
2024 年 1 月 9 日,每天花一分钟练习 C。2024 年 1 月 8 日,每天花一分钟练习 C。
每天练习一次
daily exercises
单词搜索。主题分析我们需要在二维字符的网格中查找一个单词,并且该单词的每个字母都必须在相邻的单元格中,并且不能重复使用同一个单元格。 这是一个典型的回溯问题,即我们需要尝试不同的路径,直到找到符合标准的解决方案,或者遍历所有可能的路径而没有找到解决方案。给定一个 m x n 二维字符网格板和一个字符串字。 如果网格中存在单词,则返回 true; 否则,返回 false。
单词必须由相邻单元格中的字母按字母顺序组成,其中“相邻”单元格是水平或垂直相邻的单元格。 同一单元格中的字母不允许重复使用。
为了实现回溯方法,我们需要定义一个辅助函数,该函数以递归方式在网格中搜索单词的每个字母。 此函数需要接收以下参数:
- board:2D角色网格
- word:您要查找的单词
- index:您当前要匹配的单词的字母索引
- x:要匹配的网格的行坐标
- y:要匹配的网格的列坐标
- visited:一个二维布尔数组,用于跟踪哪些单元格已被访问以避免重用
此函数的返回值是一个布尔值,该值指示是否可以从当前位置在网格中找到单词的其余部分。 具体逻辑如下:
如果索引等于单词的长度,则所有字母都已匹配,并返回 true
如果 x 或 y 越界,或者 board[x][y] 不等于 word[index],或者 visited[x][y] 为 true,则当前位置不满足条件并返回 false
否则,将 visited[x][y] 设置为 true 以指示已访问当前位置。
然后,尝试从当前位置的四个方向继续搜索:上、下、左、右,只要一个方向成功,就返回 true
最后,将 visited[x][y] 设置为 false,表示可以重新访问当前位置,并返回 false
有了这个辅助函数,我们可以写出 main 函数,用于遍历网格中的每个位置,作为搜索的起点,调用辅助函数,如果返回 true,则表示该词被找到,否则继续遍历,直到遍历所有位置,如果没有找到, 返回 false。
项目介绍
下面是我用 C 语言编写的完整程序,您可以在 VC6 中找到0 运行并调试它:
程序测试
为了验证我们的程序是否正确,我们可以使用一些测试用例来验证这一点。
给定一个字符串,验证它是否为回文字符串,仅考虑字母和数字字符,并忽略字母的大小写。知识爆炸训练营注意:在这个问题中,我们将空字符串定义为有效的回文字符串。
示例 1:输入:"a man,aplan,a canal: panama
输出:true
解释:“amanaplanacanalpanama”是回文字符串示例2:
输入:"race a car"
输出:false