update 0139.单词拆分:优化文本 和 go 代码风格

This commit is contained in:
Yuhao Ju
2022-12-23 01:16:10 +08:00
committed by GitHub
parent ea51ff4ed0
commit d178871e83

View File

@@ -138,7 +138,7 @@ public:
3. dp数组如何初始化
从递公式中可以看出dp[i] 的状态依靠 dp[j]是否为true那么dp[0]就是递的根基dp[0]一定要为true否则递下去后面都都是false了。
从递公式中可以看出dp[i] 的状态依靠 dp[j]是否为true那么dp[0]就是递的根基dp[0]一定要为true否则递下去后面都都是false了。
那么dp[0]有没有意义呢?
@@ -152,13 +152,13 @@ dp[0]表示如果字符串为空的话,说明出现在字典里。
题目中说是拆分为一个或多个在字典中出现的单词,所以这是完全背包。
还要讨论两层for循环的前后序。
还要讨论两层for循环的前后序。
**如果求组合数就是外层for循环遍历物品内层for遍历背包**
**如果求排列数就是外层for遍历背包内层for循环遍历物品**
我在这里做一个一个总结:
我在这里做一个总结:
求组合数:[动态规划518.零钱兑换II](https://programmercarl.com/0518.零钱兑换II.html)
求排列数:[动态规划377. 组合总和 Ⅳ](https://programmercarl.com/0377.组合总和.html)、[动态规划70. 爬楼梯进阶版(完全背包)](https://programmercarl.com/0070.爬楼梯完全背包版本.html)
@@ -170,7 +170,7 @@ dp[0]表示如果字符串为空的话,说明出现在字典里。
"apple" + "apple" + "pen" 或者 "pen" + "apple" + "apple" 是不可以的,那么我们就是强调物品之间顺序。
所以说,本题一定是 先遍历 背包,遍历物品。
所以说,本题一定是 先遍历 背包,遍历物品。
5. 举例推导dp[i]
@@ -209,7 +209,7 @@ public:
关于遍历顺序,再给大家讲一下为什么 先遍历物品再遍历背包不行。
这里可以给出先遍历物品遍历背包的代码:
这里可以给出先遍历物品遍历背包的代码:
```CPP
class Solution {
@@ -241,7 +241,7 @@ public:
dp[s.size()] = 0 dp[13] = 0 1 "apple" dp[8]1 "pen" dp[13]1
"apple" "pen" dp[8]1 "apple" dp[13]1
"apple" "pen" dp[8]1 "apple" dp[13]1
dp数组打印出来
@@ -352,16 +352,16 @@ class Solution:
Go
```Go
func wordBreak(s string,wordDict []string) bool {
wordDictSet:=make(map[string]bool)
for _,w:=range wordDict{
wordDictSet[w]=true
wordDictSet := make(map[string]bool)
for _, w := range wordDict {
wordDictSet[w] = true
}
dp:=make([]bool,len(s)+1)
dp[0]=true
for i:=1;i<=len(s);i++{
for j:=0;j<i;j++{
if dp[j]&& wordDictSet[s[j:i]]{
dp[i]=true
dp := make([]bool, len(s)+1)
dp[0] = true
for i := 1; i <= len(s); i++ {
for j := 0; j < i; j++ {
if dp[j] && wordDictSet[s[j:i]] {
dp[i] = true
break
}
}