力扣 单词拆分
动态规划,字符串截取,可重复用,集合类。
题目
单词可以重复使用,一个单词可用多次,应该是比较灵活的组合形式了,可以想到用dp,遍历完单词后的状态的返回值。而这里的wordDict给出的是list,但可以用set,因为hashset可以去重,hashset的查找比list要快。然后就是这里的额dp数组是个boolean值,然后用截取字符串的形式去看set里能不能找到,找不到说明拼不了。
时间复杂度:O(n^2) ,空间复杂度:O(n) 。
public class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
Set<String> w = 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 (dp[j] && w.contains(s.substring(j, i))) {
dp[i] = true;//能找到
break;
}
}
}
return dp[s.length()];//遍历到最后一个字符时这个单词的状态
}
}
状态维护,boolean类型很适合做标记位。