Leetcode 139、单词拆分
动态规划
dp[i]表示0-i位置的字符串是否可以被拆分;
递推公式:dp[i] = dp[i] || (dp[j] && wordDict.contains(s.substring(j, i)));
遍历顺序:后面的需要依赖前面的,所以从前向后遍历
初始化:dp[0]位置为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++) {
dp[i] = dp[i] || (dp[j] && wordDict.contains(s.substring(j, i)));
}
}
return dp[len];
}
}