代码拉取完成,页面将自动刷新
<?php
namespace leetcode;
use collections\compare\StringComparator;
use collections\set\Set;
use \collections\set\TreeSet;
class Solution {
/**
* @param String $s
* @param String[] $wordDict
* @return String[]
*/
public function wordBreak(string $s, array $wordDict): array
{
$wordDictSet = new TreeSet(new StringComparator());
foreach ($wordDict as $word) {
$wordDictSet->add($word);
}
return self::backtrack($s, $wordDictSet, 0);
}
/**
* @param $s
* @param Set $wordDict
* @param $start
* @return String[]
* @author mzh@shall-buy.com
* @ref: https://blog.csdn.net/abcdef314159/article/details/120051526
*/
private static function backtrack($s, Set $wordDict, $start): array
{
$ans = array();
$n = strlen($s);
for ($i = $start + 1; $i <= $n; $i++) {
$sub = substr($s, $start, $i-$start);
// 如果拆解的子串不存在于字典中,就继续拆
if (!$wordDict->contains($sub)) {
continue;
}
// 走到下面这个地方,说明拆分的子串$str存在于字典中
// 如果正好拆完了,我们直接把最后一个子串添加到$ans中返回
if ($i == $n) {
array_push($ans, $sub);
} else {
// 如果没有拆完,我们对剩下的子串继续拆分
$remains = self::backtrack($s, $wordDict, $i);
// 然后用当前的子串str和剩下的子串进行拼接(注意如果剩下的子串不能
// 完全拆分,remain就会为空,就不会进行拼接)
foreach ($remains as $remainStr) {
array_push($ans, $sub .' '. $remainStr);
}
}
}
return $ans;
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。