• 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 }
  • 相关阅读:
    MD5加密40位加密规律
    python中 if __name__ == '__main__': 浅解
    python3关于邮件的操作
    ecshop莫名其妙出现“Table '.starecs_stats' is marked as crashed and should be repaired”
    微擎安装问题
    蝉知CMS本地迁移到服务器具体步骤
    React Hooks useContext + useReducer实现简易Redux
    git merge时merge/squash merge/rebase merge的区别
    FormData 和 Content-Type: multipart/form-data
    对Promise.prototype.finally()的粗浅理解
  • 原文地址:https://www.cnblogs.com/kexinxin/p/10163059.html
Copyright © 2020-2023  润新知