leetcode139—单词划分题目链接
题目简述
输入: s string, worddict string[];
操作: 判断是否可以用worddict中的单词对s进行划分
输出: flag bool
解法分析
动态规划
dp[i]: s中第一个字符到第i个字符能否用worddict中的单词进行划分.
状态转移方程:
dp[i]=dp[i] || dp[j] && worddict.contains(s.substring(j,i))(0<=j<i)
复杂度分析
- 时间复杂度: O(n3)
- 空间复杂度: O(n)
可能的优化思路:
用hashset存放worddict,时间复杂度降至O(n2),java版本使用此法.
代码
- JAVA版
class Solution {
public boolean wordBreak(String s, List<String> wordDict) {
boolean[] dp = new boolean[s.length() + 1];
dp[0] = true;
Set<String> set = new HashSet<>();
for(String str : wordDict) set.add(str);
for(int i = 1; i <= s.length(); i++) {
for(int j = 0; j < i; j++) {
if(dp[j] && set.contains(s.substring(j,i))) {
dp[i] = true;
break;
}
}
}
return dp[s.length()];
}
}
- golang版(后续放出…