首页 > 其他分享 >单词搜索

单词搜索

时间:2024-11-10 22:48:42浏览次数:3  
标签:word int return next 单词 搜索 board visited

单词搜索

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

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

示例 1:

img

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

示例 2:

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

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

示例 3:

img

输入: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
  • boardword 仅由大小写英文字母组成

题解

​ dfs 深度搜索,逐个寻找单词,思路不难,代码优化的思路比较重要

class Solution {
    int[][] directions = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
    public boolean exist(char[][] board, String word) {
        int h = board.length, w = board[0].length;
        boolean[][] visited = new boolean[h][w];
        for (int i = 0; i < h; i++) {
            for (int j = 0; j < w; j++) {
                boolean flag = dfs(board, visited, word, 0, i, j);
                if (flag) {
                    return true;
                }
            }
        }
        return false;
    }

    private boolean dfs(char[][] board, boolean[][] visited, String word, int index, int x, int y) {
        if(board[x][y] != word.charAt(index)){
            return false;
        }else if(index == word.length() - 1){
            return true;
        }
        visited[x][y] = true;

        for(int[] dir: directions) {
            int next_x = x + dir[0];
            int next_y = y + dir[1];
            if(next_x >= 0 && next_x < board.length && next_y >= 0 && next_y < board[0].length){
                if(!visited[next_x][next_y]){
                    if (dfs(board,visited,word,index + 1,next_x,next_y)) {
                        return true;
                    }
                }
            }
        }
        visited[x][y] = false;
        return false;
    }
}
var directions = [][]int{{0, 1}, {0, -1}, {1, 0}, {-1, 0}}

func exist(board [][]byte, word string) bool {
	h, w := len(board), len(board[0])
	var visited = make([][]bool, h)
	for i := range visited {
		visited[i] = make([]bool, w)
	}
	for i, row := range board {
		for j := range row {
			flag := dfs(board, visited, word, 0, i, j)
			if flag {
				return true
			}
		}
	}
	return false
}

func dfs(board [][]byte, visited [][]bool, word string, index int, x, y int) bool {
	if board[x][y] != word[index] {
		return false
	}
	if index == len(word)-1 {
		return true
	}
	visited[x][y] = true
	for _, dir := range directions {
		next_x, next_y := x+dir[0], y+dir[1]
		if next_x >= 0 && next_x < len(board) && next_y >= 0 && next_y < len(board[0]) && !visited[next_x][next_y] {
			flag := dfs(board, visited, word, index+1, next_x, next_y)
			if flag {
				return true
			}
		}
	}
	visited[x][y] = false
	return false

}

标签:word,int,return,next,单词,搜索,board,visited
From: https://blog.csdn.net/qq_49288154/article/details/143651332

相关文章

  • 洛谷 P1321 单词覆盖还原
    一、题目描述我有一个长度为l的字符串,最开始时,这个字符串由 l 个句号(.)组成。我在这个字符串中,将多次把 boy 或者 girl 两单词,依次贴到这个字符串中。后贴上单词,会覆盖之前贴上的单词,或者覆盖句号。最终,每个单词至少有一个字符没有被覆盖。请问,一共贴有几个 boy ......
  • Python实现SSA智能麻雀搜索算法优化BP神经网络回归模型(优化权重和阈值)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后关注获取。1.项目背景随着人工智能技术的发展,机器学习算法在各个领域的应用越来越广泛。其中,神经网络作为一类重要的机器学习方法,在模式识别、图像处理、自然语言处......
  • 代码随想录算法训练营第19天|235. 二叉搜索树的最近公共祖先 ,701.二叉搜索树中的插入
    235.二叉搜索树的最近公共祖先文章链接:https://programmercarl.com/0235.二叉搜索树的最近公共祖先.html题目链接:https://leetcode.cn/problems/lowest-common-ancestor-of-a-binary-search-tree/思路:利用二叉搜索树的特性,当第一次遇到在[p,q]区间或[q,p]区间的元素的节点,则......
  • 代码随想录算法训练营第18天| 530.二叉搜索树的最小绝对差, 501.二叉搜索树中的众数 , 2
    530.二叉搜索树的最小绝对差文章链接:https://programmercarl.com/0530.二叉搜索树的最小绝对差.html视频链接:https://www.bilibili.com/video/BV1DD4y11779/?vd_source=6cb513d59bf1f73f86d4225e9803d47b题目链接:https://leetcode.cn/problems/minimum-absolute-difference-in......
  • 判断该给定的二叉树是否为二叉搜索树
    习题4.3是否二叉搜索树/*typedefstructTNode*Position;typedefPositionBinTree;structTNode{ ElementTypeData; BinTreeLeft; BinTreeRight;};*/BinTreeB=NULL;//全局指针,用来记录中序的上一个结点boolIsBST(BinTreeT){ //如果结点为空直接返回tru......
  • 程序员 SEO 系列:如何找到更多搜索关键词?
    本文分享有效的关键词挖掘策略,帮助你识别低竞争、高流量的蓝海关键词,提升网站排名并带来持续流量增长。了解如何通过竞品分析、长尾词挖掘等方法,发掘适合你网站的关键词,快速提升SEO效果。一、关键词研究(挖词)的目的?SEO挖词的目的是通过深入Research和识别有流量潜力的关键词......
  • 代码随想录算法训练营第十七天| 654.最大二叉树 , 617.合并二叉树 , 700.二叉搜索树中的
    654.最大二叉树文章链接:https://programmercarl.com/0654.最大二叉树.html题目链接:https://leetcode.cn/problems/maximum-binary-tree/description/classSolution{public:TreeNode*traversal(vector<int>&nums,intleft,intright){if(left>=right)ret......
  • LeetCode 3014[输入单词需要的最少按键次数I]
    题目链接LeetCode3014[输入单词需要的最少按键次数I]详情实例实例1实例2提示题解思路一圈下来8个字母,每个字母按1次二圈下来16个字母,前8个字母每个按1次,后8个字母,每个按2次三圈下来24个字母,前8个字母每个按1次,中间8个字母,每个按2次,最后8个字母,每个按3次四圈下来......
  • 二叉搜索树
    一.二叉搜索树介绍    二叉搜索树又叫做二叉排序树,它拥有一些特殊的性质。    1.若它的左子树不为空,那么左子树上面的节点全部小于根节点。    2.若它的右子树不为空,那么右子树上面的节点全部大于根节点。    3.它的左右子树也全部都是二......
  • 网站显示在 Google 搜索结果中
    Google会自动查找可添加到Google索引中的网站;通常您无需执行任何操作,只需将网站发布到网络上即可。但是,网站有时会被遗漏。检查您的网站是否已收录到Google中,并了解如何让您的内容在Google搜索中更易于被发现。让网页出现在Google搜索结果中的基本核对清单首先,您需要问......