Description
https://leetcode.com/problems/word-break/
题目大意:给定一个字符串s,和一个词典,判断s是否可以被分割成一个或多个字典单词的空格分隔序列。
Solving Ideas
- 动态规划
代码中的dp[i]表示以索引为i的字符为结尾的子串是否符合要求,如果dp[i]=true,说明子串s.substring(0, i+1)可以被分割成一个或多个字典单词的空格分隔序列;反之,则不能;利用动态规划的思想,可以通过子问题的解来构造原问题的解。
Solution
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
if (s == null || s.length() == 0 || wordDict == null) return false;
boolean[] dp = new boolean[s.length()];
for (int i = 0; i < s.length(); i++) {
for (int j = 0; j <= i; j++) {
String word = s.substring(j, i + 1);
if ((j == 0 || dp[j - 1]) && wordDict.contains(word)) {
dp[i] = true;
break;
}
}
}
return dp[s.length() - 1];
}
}