|
| 1 | +class Solution { |
| 2 | + |
| 3 | + /** |
| 4 | + * @param String $s |
| 5 | + * @param String[] $wordDict |
| 6 | + * @return String[] |
| 7 | + */ |
| 8 | + function wordBreak($s, $wordDict) { |
| 9 | + $map = []; |
| 10 | + self::wordBreakHelper($s, $wordDict, $map); |
| 11 | + return $map[$s]; |
| 12 | + } |
| 13 | + |
| 14 | + function wordBreakHelper($s, $dict, &$map) { |
| 15 | + if (array_key_exists($s, $map)) { |
| 16 | + return $map[$s]; |
| 17 | + } |
| 18 | + |
| 19 | + $list = []; |
| 20 | + |
| 21 | + if ($s == "") { |
| 22 | + array_push($list, ""); |
| 23 | + return $list; |
| 24 | + } |
| 25 | + |
| 26 | + foreach ($dict as $currStr) { |
| 27 | + if (self::startsWith($s, $currStr)) { |
| 28 | + $tempList = self::wordBreakHelper(substr($s, strlen($currStr)), $dict, $map); |
| 29 | + if (!empty($tempList)) { |
| 30 | + foreach ($tempList as $tempStr) { |
| 31 | + array_push($list, $currStr . ($tempStr == "" ? "" : " ") . $tempStr); |
| 32 | + } |
| 33 | + } |
| 34 | + } |
| 35 | + } |
| 36 | + |
| 37 | + $map[$s] = $list; |
| 38 | + return $list; |
| 39 | + } |
| 40 | + |
| 41 | + function startsWith($haystack, $needle) { |
| 42 | + return strncmp($haystack, $needle, strlen($needle)) === 0; |
| 43 | + } |
| 44 | +} |
0 commit comments