`
随便小屋
  • 浏览: 105920 次
  • 性别: Icon_minigender_1
  • 来自: 大连
社区版块
存档分类
最新评论

LeetCode-79-Word Search*

阅读更多

 

Word Search

 

 

 

来自 <https://leetcode.com/problems/word-search/>

 

Given a 2D board and a word, find if the word exists in the grid.

 

The word can be constructed from letters of sequentially adjacent cell, where "adjacent" cells are those horizontally or vertically neighboring. The same letter cell may not be used more than once.

 

For example,

 

Given board =

 

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]

 

word = "ABCCED", -> returns true,

 

word = "SEE", -> returns true,

 

word = "ABCB", -> returns false.

 

 

 

题目解读

 

给定一个2维字母面板和一个单词,查找该单词是否存在于此二维网格面板中。单词由二维邻接矩阵中的字母构成,同一个网格中的字母不能使用多于一次。

 

 

 

解析:这是一个深度优先搜索序列,其中有两个难点。

 

第一是判断深度优先搜索的终结条件,由于查找的是单词,可以使用单词的长度作为起终结条件。

 

第二由于同一个网格中的字母不能使用多于一次,所以要记录搜索路径。记录路径有两种方法,一种是使用一个专门的二维数组进行记录,另一种是采用将board中的字母替换成特殊字符。此代码中采用第二种方式。

 

 

 

Java代码:

 

public class Solution {
	
	public boolean exist(char[][] board, String word) {
		int rows = board.length; //行数
		int cols = board[0].length; //列数
		
		boolean result = false;
		for(int i=0; i<rows; i++) {
			for(int j=0; j<cols; j++) {
				if(searchLetter(board, word, i, j, 0)) {
					result = true;
				}
			}
		}
		return result;
	}
	
	private boolean searchLetter(char[][] board, String word, int currentRow, int currentCol, int currnetLetter) {
		// TODO Auto-generated method stub
		int rows = board.length;
		int cols = board[0].length;
		
		//判断是否越界
		if(currentRow<0 || currentRow>=rows || currentCol <0 || currentCol>= cols)
			return false;
		if(board[currentRow][currentCol] == word.charAt(currnetLetter)) {
			//记录board中当前元素的值
			char temp=board[currentRow][currentCol];
			board[currentRow][currentCol]='#';
			if(currnetLetter == word.length()-1) {
				return true;
			} else if(searchLetter(board, word, currentRow-1, currentCol, currnetLetter+1)
					||searchLetter(board, word, currentRow+1, currentCol, currnetLetter+1)
					||searchLetter(board, word, currentRow, currentCol-1, currnetLetter+1)
					||searchLetter(board, word, currentRow, currentCol+1, currnetLetter+1)){
				return true;
			}
			//如果查找失败,回复原来的元素
			board[currentRow][currentCol] = temp;
		} 
		return false;
	}

}

 算法性能:



 

 

 

 

分享到:
评论

相关推荐

    js-leetcode题解之79-word-search.js

    javascript js_leetcode题解之79-word-search.js

    Leetcode题目+解析+思路+答案.pdf

    - **Word Break**:判断一个字符串是否可以拆分为一个词汇表中的单词序列。 7. **链表(Linked List)**: - **Linked List Cycle**:检测链表中的环。 - **Remove Duplicates from Sorted List**:从已排序的...

    _leetcode-python.pdf

    - Word Search: 给定一个m×n的二维字符网格board和一个单词(字符串)word,如果word存在于网格中,则返回true;否则,返回false。 - Minimum Window Substring: 给定两个字符串s和t,找出s中包含t所有字母的最小子...

    python-leetcode题解之079-Word-Search

    python python_leetcode题解之079_Word_Search

    c语言-leetcode题解之0079-word-search.zip

    c c语言_leetcode题解之0079_word_search.zip

    Leetcode代码以及解答(2)

    ### Leetcode代码以及解答(2) #### 127. Word Ladder **知识点:** - **问题描述:** - 找到由开始到结尾的字符串的转换字符串集合,中间的转换字符串都要在给定的列表中,并且每一步只能改变一个字符。 - **...

    AlgorithmAndLeetCode#itcharge-LeetCode-Py#0211. 添加与搜索单词 - 数据结构设计

    void addWord(word) 将 word 添加到数据结构中,之后可以对它进行匹配bool search(word) 如果数据结构中存在字符串与 wor

    uber leetcode

    #### 六、Search in Rotated Sorted Array - **知识点:**二分查找、旋转数组。 - **题目描述:**给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回...

    算法刷题笔记leetcode/lintcode

    - **Binary Search**(二分查找) - Kth Largest Element(第k个最大元素) - First Position of Target(目标值首次出现的位置) - Search Insert Position(搜索插入位置) - Search for a Range(搜索范围) ...

    扩展矩阵leetcode-Leetcode:LeetcodeAnswer-Java

    扩展矩阵leetcode Leetcode Leetcode Answer-Java 数组 11.乘最多水容器 ...wordBreak 279.完全平方数 numSquares 排序 56.合并区间 merge 75.颜色分类 sortColors 179.最大数 largestNumber 324.摆

    hihocoder和leetcode-leetcode:leetcode

    hihocoder和leetcode leetcode 目录名 功能 Array 数组 Backtracking 回溯 Bit_Manipulation 位操作 Design 数据结构设计 ...单词搜索:word_search.cpp hihocoder String 文章重排:give_my_text_back.cpp

    leetcode添加元素使和等于-Leetcode-Problems-Java-Python--with-Markdown-Explanati

    leetcode添加元素使和等于 October 2nd Reviews 79 word Search Given a 2D board and a word, find if the word exists in the grid. The word can be constructed from letters of sequentially adjacent cell, ...

    LeetCode最全代码

    318| [Maximum Product of Word Lengths](https://leetcode.com/problems/maximum-product-of-word-lengths/) | [C++](./C++/maximum-product-of-word-lengths.cpp) [Python](./Python/maximum-product-of-word-...

    LeetCode-Feb2021

    例如,"Word Search"(单词搜索)问题,可以通过DFS遍历二维数组寻找单词路径。 四、动态规划 动态规划是解决复杂问题的利器,如"Longest Increasing Subsequence"(最长递增子序列)问题。Java中动态规划的实现...

    javalruleetcode-leetcode-python:leetcode问题的Python解决方案

    leetcode 刷题笔记 记录一些刷题细节,很惭愧只做了一点微小的工作 4.13 162题. Find Peak Element.Binary search,需要比较nums[mid]和nums[mid+1]. 4.12 212题. Word Search II. 用trie tree存word list,然后dfs. ...

    圆和矩形是否重叠leetcode-leetcode_solutions:leetcode_solutions

    圆和椭圆重叠leetcode ——#158 尖端 关心特殊情况 从不同的方向思考 简单的 大批 1.Two Sum -&gt; 使用哈希表避免遍历列表448.查找数组中消失的所有数字-&gt; 1.建立缓冲区来计算数字| 2.使用数组作为带符号的缓冲区118....

    leetcode耗时-word-search-ii:查词二

    leetcode 耗时查词二 给定一个 2D 板和字典中的单词列表,找到板中的所有单词。 每个单词必须由顺序相邻单元格的字母构成,其中“相邻”单元格是水平或垂直相邻的单元格。 同一个字母单元格不能在一个单词中多次使用...

    leetcode1-200题源码(c++)

    4. 题目79:单词搜索 (Word Search) 在一个二维字符网格中查找给定的单词,使用深度优先搜索(DFS)或广度优先搜索(BFS)策略,结合回溯技术来实现。 5. 题目4:寻找两个有序数组的中位数 (Median of Two Sorted ...

    LeetCode:关于LeetCode.com和ACM的一些算法问题

    LeetCode一些 LeetCode 题目的进阶解法,追求极致效率。由于 LeetCode 已启用中文版域名 leetcode-... Word-Search-II题目: | 英文站源码:./problem-0212-Word-Search-II/标签:哈希表,双向链表难度:困难 / Hard

Global site tag (gtag.js) - Google Analytics