zoukankan      html  css  js  c++  java
  • Leetcode 79.单词搜索

    单词搜索

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

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

    示例:

    board =

    [

    ['A','B','C','E'],

    ['S','F','C','S'],

    ['A','D','E','E']

    ]

    给定 word = "ABCCED", 返回 true.

    给定 word = "SEE", 返回 true.

    给定 word = "ABCB", 返回 false.

    题意:在矩阵中,相邻的元素可以是上、下、左、右的元素。同时要求矩阵中的同一个字符不能重复匹配。

       

    思路:使用DFS遍历矩阵,直到遍历完字符串,说明匹配。但是需要记录矩阵中哪个字符是已经匹配过的。

    由于英文字符范围是0~127,因此遍历某个字符后,进行c^=128操作,该字符在后续匹配中就不会再次

    匹配到,从而实现标记的效果。在回溯的时候需要将标记的字符还原。

     1 import java.util.*;
     2 
     3 public class Solution{
     4     public boolean exist(char[][] board,String word){
     5         for(int i=0;i<board.length;i++){
     6             for(int j=0;j<board[0].length;j++){
     7                 if(exist(board,i,j,word,0))
     8                     return true;
     9             }
    10         }
    11         return false;
    12     }
    13 
    14     public boolean exist(char[][] board,int x,int y,String word,int index){
    15         if(index==word.length()) return true;
    16         if(x<0 || y<0 || x>=board.length || y>=board[0].length || board[x][y]!=word.charAt(index))
    17             return false;
    18         board[x][y]^=128;
    19         boolean exist=exist(board,x-1,y,word,index+1)||
    20                 exist(board,x+1,y,word,index+1)||
    21                 exist(board,x,y-1,word,index+1)||
    22                 exist(board,x,y+1,word,index+1);
    23         board[x][y]^=128;
    24         return exist;
    25     }
    26 }
  • 相关阅读:
    shell 的多进程
    shell 按行读取文件的内容
    2>&1的意思
    >/dev/null 2>&1
    js 变量作用域
    Premiere Pro 中的键盘快捷键
    premiere pro 2019 mac 破解
    js 空语句
    js 数组原型
    js 奇偶判断
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163059.html
Copyright © 2011-2022 走看看