单词搜索
 
 

给定一个二维网格和一个单词,找出该单词是否存在于网格中。

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

示例:

board =
[
['A','B','C','E'],
['S','F','C','S'],
['A','D','E','E']
] 给定 word = "ABCCED", 返回 true.
给定 word = "SEE", 返回 true.
给定 word = "ABCB", 返回 false.

思路:回溯算法,返回false的条件是探索到达了边界,已经探索过了,探索的字母与给定字符串的字符不相等。

探索是向上下左右探索,因此有四个回溯(bcakTrace())。

class Solution {
public boolean exist(char[][] board, String word) {
int rows=board.length; //长
int cols=board[0].length;
boolean res=false;
boolean[][] mark=new boolean[rows][cols];
for(int i=0;i<rows;i++){
for(int j=0;j<cols;j++){
if(word.charAt(0)==board[i][j]){ //先找到字符串的起点
res=backTrace(0,word,board,i,j ,mark );
if(res==true)return true;
}
}
}
return false;
}
public boolean backTrace(int index,String word,char[][] board,int row,int col,boolean[][] mark){
if(index==word.length())return true; //回溯的边界条件
if(row>=board.length||row<0||col>=board[0].length||col<0)return false;
if(mark[row][col]==true||word.charAt(index)!=board[row][col])return false;
mark[row][col]=true;
if(backTrace(index+1,word,board,row+1,col,mark)||
backTrace(index+1,word,board,row-1,col,mark)||
backTrace(index+1,word,board,row,col+1,mark)||
backTrace(index+1,word,board,row,col-1,mark))
return true;
mark[row][col]=false; //每次探索至边界,不成立时,都要将标记清除
return false;
}
}

leetcode-单词探索的更多相关文章

  1. LeetCode —— 单词接龙(Python)

    使用字典,降低查找的复杂度.使用list会超时. class Solution: def nextWordsList(self, word, wordDict): res_list = [] for ...

  2. 8月leetcode刷题总结

    刷题链接:https://leetcode-cn.com/explore/ 根据leetcode的探索栏目,八月份一直在上面进行刷题.发现算法题真的好难,真-计算机思维. 核心是将现实问题转化为计算机 ...

  3. leetcode探索中级算法

    leetcode探索中级答案汇总: https://leetcode-cn.com/explore/interview/card/top-interview-questions-medium/ 1)数 ...

  4. [LeetCode] Concatenated Words 连接的单词

    Given a list of words (without duplicates), please write a program that returns all concatenated wor ...

  5. [LeetCode] Word Squares 单词平方

    Given a set of words (without duplicates), find all word squares you can build from them. A sequence ...

  6. [LeetCode] Valid Word Square 验证单词平方

    Given a sequence of words, check whether it forms a valid word square. A sequence of words forms a v ...

  7. [LeetCode] Minimum Unique Word Abbreviation 最短的独一无二的单词缩写

    A string such as "word" contains the following abbreviations: ["word", "1or ...

  8. [LeetCode] Valid Word Abbreviation 验证单词缩写

    Given a non-empty string s and an abbreviation abbr, return whether the string matches with the give ...

  9. [LeetCode] Maximum Product of Word Lengths 单词长度的最大积

    Given a string array words, find the maximum value of length(word[i]) * length(word[j]) where the tw ...

  10. [LeetCode] Unique Word Abbreviation 独特的单词缩写

    An abbreviation of a word follows the form <first letter><number><last letter>. Be ...

随机推荐

  1. [置顶] Android 高级开发 源码 UI 缓存 网络

    1.Android 源码剖析 性能优化  开源代码 2.Android UI效果源码 3.http://mzh3344258.blog.51cto.com/1823534/d-3 4.微信公众平台开发 ...

  2. 微软提供的Office在线预览地址

    https://products.office.com/zh-CN/office-online/view-office-documents-online

  3. input输入框中list属性不能没有效果

    网页代码入下,就是出不来效果. 人物:zslsww 解决办法: 将option中的value属性去掉: 张山李四王五爪留 显示效果,问题得到解决.

  4. Jquery获取select标签的值、文本方式

    <script> function add(){            var prop_name=$("#prop").find("option:selec ...

  5. Oracle记录类型(record)和%rowtype

    Oracle中的记录类型(record)和使用%rowtype定义的数据类型都是一种单行多列的数据结构,可以理解为一个具有多个属性的对象.其中属性名即为列名. 记录类型(record) 记录类型是一种 ...

  6. 360极速浏览器用ie8模式打开网页(360浏览器同理)

    在访问年代久远的的网页时经常会遇到兼容性的问题,用360浏览器(或360极速浏览器)中通过设置可解决. 在360极速浏览器中分别依次选择:选项->高级设置->内核模式->内核切换设置 ...

  7. CentOS 6.8安装Ceph

    机器规划 IP 主机名 角色 10.101.0.1 ceph01 mon admin mds 10.101.0.2 ceph02 ods 10.101.0.3 ceph03 ods 10.101.0. ...

  8. 利用clear清除浮动的一些问题

    下面这段代码是用来清除浮动带来的高度塌陷问题 .clearfix:before { content: "."; display: block; height: 0; clear: ...

  9. 大数据学习之Hadoop环境搭建

    一.Hadoop的优势 1)高可靠性:因为Hadoop假设计算元素和存储会出现故障,因为它维护多个工作数据副本,在出现故障时可以对失败的节点重新分布处理. 2)高扩展性:在集群间分配任务数据,可方便的 ...

  10. 【Hive五】Hive函数UDF

    Hive函数 系统自带的函数 查看系统自带的函数 查看系统自带的函数 show functions; 显示自带的函数的用法 desc function upper; 详细显示自带的函数的用法 desc ...