Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s ="leetcode",
dict =["leet", "code"].
Return true because"leetcode"can be segmented as"leet code".
怎么判断是不是根据单词拼写而来的,如果是返回true。
思路:对第i个字符,从第j个字符到第i个字符是在dict里面,且第i个字符到最后一个字符是可以用单词拼出来的。那么第j个字符到最后一个字符就可以用dict拼出来。如果j到了0,那么就说明这个字符串可以用这个dict拼出来。
<?php
class Solution {
/**
* @param $s string
* @param $dict array
* @return mixed
*/
public function wordBreak($s, $dict) {
$sNum = strlen($s);
$D = array(
0 => true,
);
for ($i = 1; $i <= $sNum; $i ++) {
$D[$i] = false;
for ($j = 0; $j < $i; $j ++) {
if ($j == 0) {
$subS = substr($s, -1 * $i);
} else {
$subS = substr($s, -1 * $i,-1 * $j);
}
if (in_array($subS, $dict) && $D[$j] == 1) {
$D[$i] = true;
break;
}
}
}
return $D[$sNum];
}
}
$str = 'helloiamame';
$dict = array(
'hello','i','am','ame',
);
$objSolution = new Solution();
$ret = $objSolution->wordBreak($str, $dict);
if ($ret) {
print '可以';
} else {
print '不可以';
}