动态规划。
问题分解:
以leetcode为例,判断一个字符串是否可以被分割成一个一个的单词,那么就就可以先判断l和eetcode是否在字典当中,只有前半部分和剩余部分都在字典当中,那么此时字符串才能被分割为单词;如果不在的话那么继续向下扫描,判断le和eetcode分别在字典当中。这里面使用一个辅助数组用来存放当前扫描位置前的判断结果,就是存放l、le等的判断结果,方便下一次判断(记忆搜索)
状态转移方程:result【j】 == true && wordDict.contains(s.substring(j,i))
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
final int length = s.length();
boolean[] result = new boolean[length+1];
result[0] = true;
for (int i = 0; i <= length; i++){
for (int j = 0; j < i; j++){
if (result[j] && wordDict.contains(s.substring(j,i))){
result[i] = true;
}
}
}
return result[length];
}
}