力扣139.单词拆分
题目链接:https://leetcode.cn/problems/word-break/
思路
1.确定dp[i]的含义:字符串长度为i的字符串是否能由wordDict里的单词组成
2.递推公式:
怎样判断dp[i] = true?
假设j在i之前,那么判断dp[i]=true的条件为:
(1)dp[j]=true
(2)字符串j到i这一串字符是wordDict里的单词
即,
if(set.contains(s.substring(j,i)) && dp[j] == true){
dp[i] = true;
}
3.初始化:dp[0]=true,不然if里的判断语句永远不成立
4.遍历顺序:这里求的是排列数,因为leetcode
和codeleet
是不一样的,所以要先遍历背包再遍历物品
5.打印数组:由于dp[i]表示的是字符串长度,所以return dp[s.length()]
完整代码
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
HashSet<String> set = new HashSet<>(wordDict);
boolean[] dp = new boolean[s.length()+1];
dp[0] = true;
for (int i = 1; i <= s.length(); i++) {
for (int j = 0; j < i; j++) {
if(set.contains(s.substring(j,i)) && dp[j] == true){
dp[i] = true;
}
}
}
return dp[s.length()];
}
}