【LeetCode】79.单词搜索

这篇具有很好参考价值的文章主要介绍了【LeetCode】79.单词搜索。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中,返回 true ;否则,返回 false 。

单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。

示例 1:

【LeetCode】79.单词搜索,LeetCode,leetcode,算法,java

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
输出:true

示例 2:

【LeetCode】79.单词搜索,LeetCode,leetcode,算法,java

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
输出:true

示例 3:

【LeetCode】79.单词搜索,LeetCode,leetcode,算法,java

输入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
输出:false

提示:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board 和 word 仅由大小写英文字母组成

解答

源代码

class Solution {
    public boolean exist(char[][] board, String word) {
        // 表示当前格子是否被经过
        boolean visited[][] = new boolean[board.length][board[0].length];

        for (int i = 0; i < board.length; i++) {
            for (int j = 0; j <board[0].length; j++) {
                if (dfs(board, i, j, word, 0, visited)) {
                    return true;
                }
            }
        }

        return false;
    }

    public boolean dfs(char[][] board, int i, int j, String word, int k, boolean visited[][]) {
        // 当前格子和word的k索引对应的字符不一致
        if (board[i][j] != word.charAt(k)) {
            return false;
        }

        // 已经到word单词的最后一个字符
        if (k == word.length() - 1) {
            return true;
        }

        visited[i][j] = true;
        int[][] dirs = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}};

        for (int[] dir : dirs) {
            int x = dir[0], y = dir[1];
            int newi = i + x, newj = j + y;

            if (newi >= 0 && newj >= 0 && newi <board.length && newj < board[0].length && visited[newi][newj] == false) {
                if (dfs(board, newi, newj, word, k + 1, visited)) {
                    return true;
                } else {
                    continue;
                }
            }
        }

        visited[i][j] = false;

        return false;
    }
}

总结

这个题目还挺熟悉的,应该是大一小学期实训的时候做过,那时候做的是迷宫问题,都是方向+回溯。文章来源地址https://www.toymoban.com/news/detail-613718.html

到了这里,关于【LeetCode】79.单词搜索的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 79. 单词搜索

    题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台  解题思路:递归+回溯 首先遍历每一个board中的字符,如果该字符和word的第一个字符相等,就从这个位置进行匹配搜索,如果能够找到word,就返回true,board中可能存在多个字符合word中的第一个字符相等的情况,

    2024年02月13日
    浏览(32)
  • 力扣79. 单词搜索

    思路: 定义函数 check(i,j,k) 为网格 (i,j) 位置出发能够搜索到单词 word(k),如果搜索到返回 true,否则返回 false; 搜索规则: 【R1】如果 board[i][j] != word[k],直接返回 false; 【R2】如果当前已经访问到字符串的末尾,且对应字符依然匹配,此时直接返回 true; 【R3】否则,遍历

    2024年01月18日
    浏览(40)
  • 力扣每日一题79:单词搜索

    给定一个  m x n  二维字符网格  board  和一个字符串单词  word  。如果  word  存在于网格中,返回  true  ;否则,返回  false  。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不

    2024年02月07日
    浏览(44)
  • java数据结构与算法刷题-----LeetCode240. 搜索二维矩阵 II

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 解题思路 法一:把整个数组遍历一遍,时间复杂度O(m*n) 法二:每一行用二分搜索,那么时间复杂度就是O(m * l o g 2 n log_2{n} l o g

    2024年01月22日
    浏览(61)
  • Java算法_ 验证二叉搜索树(LeetCode_Hot100)

    题目描述: 给你一个二叉树的根节点 ,判断其是否是一个有效的二叉搜索树。root 有效 二叉搜索树定义如下: 节点的左子树只包含 小于 当前节点的数。 节点的右子树只包含 大于 当前节点的数。 所有左子树和右子树自身必须也是二叉搜索树。 获得更多?算法思路:代码文

    2024年02月12日
    浏览(40)
  • java数据结构与算法刷题-----LeetCode96. 不同的二叉搜索树

    java数据结构与算法刷题目录(剑指Offer、LeetCode、ACM)-----主目录-----持续更新(进不去说明我没写完): https://blog.csdn.net/grd_java/article/details/123063846 很多人觉得动态规划很难,但它就是固定套路而已。其实动态规划只不过是将多余的步骤,提前放到dp数组中(就是一个数组,只

    2024年01月21日
    浏览(56)
  • 算法leetcode|58. 最后一个单词的长度(rust重拳出击)

    给你一个字符串 s ,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。 1 = s.length = 10 4 s 仅有英文字母和空格 ’ ’ 组成 s 中至少存在一个单词 面对这道算法题目,二当家的

    2024年02月13日
    浏览(52)
  • 算法leetcode|30. 串联所有单词的子串(rust重拳出击)

    给定一个字符串 s 和一个字符串数组 words 。 words 中所有字符串 长度相同 。 s 中的 串联子串 是指一个包含 words 中所有字符串以任意顺序排列连接起来的子串。 例如,如果 words = [\\\"ab\\\",\\\"cd\\\",\\\"ef\\\"] , 那么 \\\"abcdef\\\" , \\\"abefcd\\\" , \\\"cdabef\\\" , \\\"cdefab\\\" , \\\"efabcd\\\" , 和 \\\"efcdab\\\" 都是串联子串。

    2023年04月08日
    浏览(51)
  • 算法学习——LeetCode力扣图论篇3(127. 单词接龙、463. 岛屿的周长、684. 冗余连接、685. 冗余连接 II)

    127. 单词接龙 - 力扣(LeetCode) 描述 字典 wordList 中从单词 beginWord 和 endWord 的 转换序列 是一个按下述规格形成的序列 beginWord - s1 - s2 - … - sk: 每一对相邻的单词只差一个字母。 对于 1 = i = k 时,每个 si 都在 wordList 中。注意, beginWord 不需要在 wordList 中。 sk == endWord 给你两

    2024年04月09日
    浏览(77)
  • 数据结构与算法之字符串: Leetcode 557. 反转字符串中的单词 III (Typescript版)

    翻转字符串中的单词 III https://leetcode.cn/problems/reverse-words-in-a-string-iii/ 描述 给定一个字符串 s ,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。 示例 1: 示例 2: 提示: 1 = s.length = 5 * 1 0 4 10^4 1 0 4 s 包含可打印的 ASCII 字符。 s 不包含任何开头或

    2024年02月01日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包