LeetCode—139. Word Break
题目
https://leetcode.com/problems/word-break/description/
给出一个非空字符串s,和一个字典,其中包含非空的单词,判断s是否可以被完全切分成由字典中的单词所组成。字典中的单词可以重复使用。
思路及解法
动态规划的题目。
设dp[i]为前i个字符是否可以切割。一个字符串S,它的长度为len,如果S能够被“字典集合”(dict)中的单词拼接而成,那么所要满足的条件为:
dp[j] && dict.contains(s.substring(j, i))
如果我们想知道某个子串是否可由dict中的几个单词拼接而成就可以用这样的方式得到结果(满足条件为True, 不满足条件为False)存入到一个boolean数组的对应位置上。需要注意的是,dp[]数组在初始化时的长度应该是len+1,且第一个值为true
代码
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
int len = s.length();
boolean[] dp = new boolean[len+1];
dp[0] = true;
for(int i=1; i<=len; i++){
for(int j=0; j<i; j++){
String tmp = s.substring(j, i);
if(dp[j] && wordDict.contains(tmp)){
dp[i] = true;
break;
}
}
}
return dp[len];
}
}