Word Search

来源:互联网 发布:阿里云栖大会2016 编辑:程序博客网 时间:2024/06/01 16:48

1.题目

给出一个二维的字母板和一个单词,寻找字母板网格中是否存在这个单词。

单词可以由按顺序的相邻单元的字母组成,其中相邻单元指的是水平或者垂直方向相邻。每个单元中的字母最多只能使用一次。

给出board =

[

  "ABCE",

  "SFCS",

  "ADEE"

]

word = "ABCCED", ->返回 true,

word = "SEE",-> 返回 true,

word = "ABCB", -> 返回 false.

2.算法

我们对每个字母向上下,左右的字母进行深度搜索,由于用过的字母不能在用,我们维护一个boolean[board.length][board[0].length]的二维数组,用来标记是否用过

    public boolean exist(char[][] board, String word)     {        // write your code here    if (word == null || word.length() == 0)    {    return true;    }    if (board == null || board.length == 0 || board[0].length == 0)    {    return false;    }    boolean[][] used = new boolean[board.length][board[0].length];    for (int i = 0; i < board.length; i++)    {    for (int j = 0; j < board[0].length; j++)    {    if (search(board, word, 0, i, j, used))    {    return true;    }    }    }    return false;    }    public boolean search(char[][] board, String word, int index, int i, int j, boolean[][] use)    {    if (index == word.length())    {    return true;    }    if (i < 0 || j < 0 || i >= board.length || j >= board[0].length || use[i][j] == true || word.charAt(index) != board[i][j])    {    return false;    }    use[i][j] = true;    boolean res = search(board,word,index+1,i-1,j,use)                     || search(board,word,index+1,i+1,j,use)                    || search(board,word,index+1,i,j-1,use)                     || search(board,word,index+1,i,j+1,use);          use[i][j] = false;          return res;      }


0 0
原创粉丝点击