leetcode:word search +word searchII总结

leetcode:word search +word searchII总结

①word search:给定一个m x n的矩阵A

[

  ['A','B','C','E'],
  ['S','F','C','S'],
  ['A','D','E','E']

],同时给定一个单词,例如word = "ABCCED", 在矩阵中任意连续不重复走动,若可以找到word对应的单词则返回true,否则返回false.主要的思路就是采用递归,对于矩阵中的每一个点,在A[i][j] ==word[k]的情况下,再次调用函数本身检测上下左右的点是不是和word[k+1]相等。这里有一个特别要注意的就是检测一个点的上下左右的情况会造成字母的重复使用,为了防止这种情况,在检查之前,要先将word[k]变成invalid。

class Solution {
     public boolean check(char[][] board,String word,int index,int i,int j)
   {
         boolean flag = false;
  if(word.length()==index)
  return true;
  if(i>=0&&i<board.length&&j>=0&&j<board[0].length&&word.charAt(index) == board[i][j])
  {
           board[i][j] ='*';
  flag= check(board,word,index+1,i-1,j)||
 check(board,word,index+1,i+1,j)||
 check(board,word,index+1,i,j-1)||
 check(board,word,index+1,i,j+1);
           board[i][j] = word.charAt(index);
  }
return flag;   
   }
    public boolean exist(char[][] board, String word) {
        if(board.length ==0)
            return false;
        for(int i=0;i<board.length;i++)
  for(int j=0;j<board[0].length;j++)
  {
  if(check(board,word,0,i,j))
  return true;
  }
       return false;
    }

}

②word searchII:是word search的进阶版,给定的是一个words数组,对数组中的每一个字符串进行查找,返回可以在矩阵中找到的所有的字符串。应用word search的思路,对每一个字符串进行循环比对,可以AC(我就是这么做的),但是速度比较慢,因为对于像“BOY”和"BOARD"这样的单词,他们有相同前缀,对每一个单词按照word search的方式去比对,会造成一些没有必要的重复的工作。

看了一个人的思路:他对给定的words数组建立了一个搜索树,对有相同前缀的字符串,可以避免重复的工作,具体的对于树中元素的检查工作还是与word search的思路大体相似,word search在递归到word末尾时停止,word searchII在递归到搜索树的叶子节点之后停止。

代码链接:https://leetcode.com/problems/word-search-ii/discuss/59780/Java-15ms-Easiest-Solution-(100.00)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值