leetcode--Word Search

Given a 2D board and a word, find if the word exists in the grid.java

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.code

For example,
Given board =blog

[
  ["ABCE"],
  ["SFCS"],
  ["ADEE"]
]

word = "ABCCED", -> returns true,
word = "SEE", -> returns true,
word = "ABCB", -> returns false.string

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;
    }
}
相關文章
相關標籤/搜索