《leetCode-php》查找字符串

给出一个二维字符数组和一个单词,判断单词是否在数组中出现, 

单词由相邻单元格的字母连接而成,相邻单元指的是上下左右相邻。同一单元格的字母不能多次使用。

例如: 

给出的字符数组= 

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

单词 ="ABCCED", -> 返回 true,
单词 ="SEE", ->返回 true,
单词 ="ABCB", -> 返回 false.

<?php
function exist($arrBoard, $word) {
    $line = count($arrBoard);
    $row = count($arrBoard[0]);
    for ($i = 0; $i < $line; $i ++) {
        for ($j = 0; $j < $row; $j ++) {
            $ret = dfs($arrBoard, $i, $j, array(), $word, 0);
            if ($ret) {
                return true;
            }
        }
    }
    return false;
}
function dfs($arrBoard, $line, $row, $arrVisited, $word, $count) {
    if ($count >= strlen($word)) {
        return true;
    }
    if ($line < 0 || $line >= count($arrBoard) || $row < 0 || $row >= count($arrBoard[0])
        || $word[$count] != $arrBoard[$line][$row] || $arrVisited[$line][$row]) {
        return false;
    }
    $arrVisited[$line][$row] = 1;
    $dfs1 = dfs($arrBoard, $line + 1, $row, $arrVisited, $word, $count + 1);
    $dfs2 = dfs($arrBoard, $line, $row + 1, $arrVisited, $word, $count + 1);
    $dfs3 = dfs($arrBoard, $line - 1, $row, $arrVisited, $word, $count + 1);
    $dfs4 = dfs($arrBoard, $line, $row - 1, $arrVisited, $word, $count + 1);
    return $dfs1 || $dfs2 || $dfs3 || $dfs4;
}
$arr = [
    ['A','B','C','E'],
    ['S','F','C','S'],
    ['A','D','E','E'],
];
$word = 'ABCCED';
$word = 'SEE';
//$word = 'ABCB';
$ret = exist($arr, $word);
print intval($ret);

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值