zoukankan      html  css  js  c++  java
  • leetcode--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.

    public class Solution {
        /**
    	 * dfs algorithm implementation
    	 * @param board -char array
    	 * @param word -string to be searched
    	 * @return true if word is contained in board, false, otherwise
    	 * @author Averill Zheng
    	 * @version 2014-07-01
    	 * @since JDK 1.7
    	 */
    	public boolean exist(char[][] board, String word) {
    		int row = board.length, len = word.length();
    		if(row > 0 && len > 0){
    			int column = board[0].length;			
    			boolean[][] alreadyChecked = new boolean[row][column];
    			//dfs search for each board[i][j]
    			for(int i = 0; i < row; ++i){
    				for(int j = 0; j < column; ++j) {
    					if(dfs(board, i, j, alreadyChecked, word, 0))
    						return true;
    				}
    			}
    		}
    		return false;
    	}
    		
    	private boolean dfs(char[][] board, int i, int j, boolean[][] alreadyChecked, String word, int count) {
    		//ending condition of dfs
    		if(alreadyChecked[i][j] || board[i][j] != word.charAt(count))
    			return false;
    		
    		if(count == word.length() - 1)
    			return true;
    		//set current coordinates checked	
    		alreadyChecked[i][j] = true;
    		
    		//dfs implementations
    		if(i - 1 >= 0 && dfs(board, i - 1, j, alreadyChecked, word, count + 1))
    			return true; 
    		if(i + 1 < board.length && dfs(board, i + 1, j, alreadyChecked, word, count + 1))
    			return true;
    		if(j - 1 >= 0 && dfs(board, i, j - 1, alreadyChecked, word, count + 1))
    			return true;
    		if(j + 1 <board[0].length && dfs(board, i, j + 1, alreadyChecked, word, count + 1))
    			return true;
    		
    		//if the dfs find the string, the process is terminated,
    		//otherwise, we reset the coordinates (i,j) to unchecked for the other dfs searchs
    		alreadyChecked[i][j] = false;
    		return false;
        }
    }
    

      

  • 相关阅读:
    整理Eclipse常用快捷键
    前端网站资源推荐
    Node.js 官方示例中的 ECMAScript 2015
    D3.js 入门系列 — 选择元素和绑定数据
    D3.js 入门系列
    PlaceHolder的两种实现方式
    Vue.js 是什么
    Webstorm官方最新版本for Mac版本 不用注册码/破坏原文件
    vue.js 学习 仅自己加强记忆
    jQuery 动画animate,显示隐藏,淡入淡出,下拉切换,过渡效果
  • 原文地址:https://www.cnblogs.com/averillzheng/p/3821673.html
Copyright © 2011-2022 走看看