更多题解尽在 https://sugar.matrixlab.dev/algorithm 每日更新。
组队打卡,更多解法等你一起来参与哦!
LeetCode 139. 单词拆分,难度中等。
DP
解题思路:
- 使用
Set
来存储字典中的单词,这样可以在常数时间内检查一个单词是否在字典中; - 初始化
dp
,dp[0] = true
,表示空字符串可以被拆分; - 对于每个位置
i
,检查从位置j
到位置i
的子字符串s[j:i]
是否在字典中;如果dp[j]
为true
并且s.substring(j, i)
在字典中,则将dp[i]
设置为true
并且跳出内层循环; - 返回
dp[s.length()]
,表示整个字符串是否可以被拆分。
class Solution {public boolean wordBreak(String s, List<String> wordDict) {Set<String> wordSet = new HashSet<>(wordDict);int n = s.length();boolean[] dp = new boolean[n + 1];dp[0] = true;for (int i = 0; i <= n; i++) {for (int j = 0; j < i; j++) {if (dp[j] && wordSet.contains(s.substring(j, i))) {dp[i] = true;break;}}}return dp[n];}
}