编程语言
首页 > 编程语言> > 《leetcode-php》给出头尾和字典,求拼接的最短路径

《leetcode-php》给出头尾和字典,求拼接的最短路径

作者:互联网

Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from start to end, such that:

For example,

Given:

start ="hit"

end ="cog"

dict =["hot","dot","dog","lot","log"]

Return

  [

    ["hit","hot","dot","dog","cog"],

    ["hit","hot","lot","log","cog"]

  ]

Note:

给出了一个开始和一个结束,还有一个数组,每次变更一个字母,用数组中的词把首尾链接起来,吐出最短的列表。

使用递归遍历也不是很麻烦

<?php
function findLadders($arrWord, $startWord, $stopWord, &$arrRet, &$arrTmp) {
    if (empty($arrWord) && !onlyOneStr($startWord, $stopWord)) {
        return;
    }
    array_push($arrTmp, $startWord);
    if (onlyOneStr($startWord, $stopWord)) {
        array_push($arrTmp, $stopWord);
        print '接上了'.$startWord.$stopWord."\n";
        $arrRet[] = $arrTmp;
        array_pop($arrTmp);
    }
    foreach ($arrWord as $key => $item) {
        //如果可以和开始匹配上,则更新开始继续往下找
        if (onlyOneStr($item, $startWord)) {
            unset($arrWord[$key]);
            $arrNewWord = $arrWord;
            findLadders($arrNewWord, $item, $stopWord, $arrRet, $arrTmp);
            $arrWord[$key] = $item;
        }
    }
    array_pop($arrTmp);
}
function onlyOneStr($word1, $word2) {
    $noEqualNum = 0;
    $num = strlen($word1);
    for ($i = 0; $i < $num; $i ++) {
        if ($word1[$i] !== $word2[$i]) {
            $noEqualNum ++;
        }
    }
    if ($noEqualNum == 1) {
        return true;
    } else {
        return false;
    }
}
$arrWord   = ["hot","dot","dog","lot","log"];
$startWord = "hit";
$stopWord  = "cog";
$arrRet    = array();
$arrTmp    = array();
findLadders($arrWord, $startWord, $stopWord, $arrRet, $arrTmp);
foreach ($arrRet as $key => $item) {
    $num = count($item);
    $arrIndex[$num][] = $key;
    if (!isset($minNum)) {
        $minNum = $num;
        continue;
    }
    if ($minNum > $num) {
        $minNum = $num;
    }
}
foreach ($arrIndex[$minNum] as $item) {
    $arrOutput[] = $arrRet[$item];
}
print json_encode($arrOutput);

 

标签:头尾,arrWord,hit,arrRet,item,minNum,num,php,leetcode
来源: https://blog.csdn.net/less_cold/article/details/98884663