<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                # 0139. 單詞拆分 ## 題目地址(139. 單詞拆分) <https://leetcode-cn.com/problems/word-break/> ## 題目描述 ``` <pre class="calibre18">``` 給定一個非空字符串 s 和一個包含非空單詞的列表 wordDict,判定 s 是否可以被空格拆分為一個或多個在字典中出現的單詞。 說明: 拆分時可以重復使用字典中的單詞。 你可以假設字典中沒有重復的單詞。 示例 1: 輸入: s = "leetcode", wordDict = ["leet", "code"] 輸出: true 解釋: 返回 true 因為 "leetcode" 可以被拆分成 "leet code"。 示例 2: 輸入: s = "applepenapple", wordDict = ["apple", "pen"] 輸出: true 解釋: 返回 true 因為 "applepenapple" 可以被拆分成 "apple pen apple"。 注意你可以重復使用字典中的單詞。 示例 3: 輸入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"] 輸出: false ``` ``` ## 前置知識 - [動態規劃](https://github.com/azl397985856/leetcode/blob/master/thinkings/dynamic-programming.md) ## 公司 - 阿里 - 騰訊 - 百度 - 字節 ## 思路 這道題是給定一個字典和一個句子,判斷該句子是否可以由字典里面的單詞組出來,一個單詞可以用多次。 暴力的方法是無解的,復雜度極其高。 我們考慮其是否可以拆分為小問題來解決。 對于問題`(s, wordDict)` 我們是否可以用(s', wordDict) 來解決。 其中 s' 是 s 的子序列, 當 s'變成尋常(長度為 0)的時候問題就解決了。 我們狀態轉移方程變成了這道題的難點。 我們可以建立一個數組 dp, dp\[i\]代表 字符串 s.substring(0, i) 能否由字典里面的單詞組成, 值得注意的是,這里我們無法建立 dp\[i\] 和 dp\[i - 1\] 的關系, 我們可以建立的是 dp\[i - word.length\] 和 dp\[i\] 的關系。 我們用圖來感受一下: ![](https://img.kancloud.cn/2b/01/2b01a6451bc955d2357b686479395355_834x455.jpg) 沒有明白也沒有關系,我們分步驟解讀一下: (以下的圖左邊都代表 s,右邊都是 dict,灰色代表沒有處理的字符,綠色代表匹配成功,紅色代表匹配失敗) ![](https://img.kancloud.cn/55/b2/55b2dac15f553fc9de1684affdefb60f_392x397.jpg) ![](https://img.kancloud.cn/1f/bc/1fbc5179b2da80a2c0d1aab1ff09bed0_425x380.jpg) ![](https://img.kancloud.cn/96/8b/968b92b012a88b9509b66aed426fa7a9_824x358.jpg) ![](https://img.kancloud.cn/7f/22/7f22585dd8929ad2d6166b2fb3626c31_837x746.jpg) 上面分步解釋了算法的基本過程,下面我們感性認識下這道題,我把它比喻為 你正在`往一個老式手電筒??中裝電池` ![](https://img.kancloud.cn/d9/85/d98583b58d2644f3620833d045b4464e_827x567.jpg) ## 代碼 ``` <pre class="calibre18">``` <span class="hljs-title">/** * @param {string} s * @param {string[]} wordDict * @return {boolean} */</span> <span class="hljs-keyword">var</span> wordBreak = <span class="hljs-function"><span class="hljs-keyword">function</span> (<span class="hljs-params">s, wordDict</span>) </span>{ <span class="hljs-keyword">const</span> dp = <span class="hljs-params">Array</span>(s.length + <span class="hljs-params">1</span>); dp[<span class="hljs-params">0</span>] = <span class="hljs-params">true</span>; <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> i = <span class="hljs-params">0</span>; i < s.length + <span class="hljs-params">1</span>; i++) { <span class="hljs-keyword">for</span> (<span class="hljs-keyword">let</span> word <span class="hljs-keyword">of</span> wordDict) { <span class="hljs-keyword">if</span> (word.length <= i && dp[i - word.length]) { <span class="hljs-keyword">if</span> (s.substring(i - word.length, i) === word) { dp[i] = <span class="hljs-params">true</span>; } } } } <span class="hljs-keyword">return</span> dp[s.length] || <span class="hljs-params">false</span>; }; ``` ``` **復雜度分析** - 時間復雜度:O(N2)O(N ^ 2)O(N2) - 空間復雜度:O(N)O(N)O(N) 大家對此有何看法,歡迎給我留言,我有時間都會一一查看回答。更多算法套路可以訪問我的 LeetCode 題解倉庫:<https://github.com/azl397985856/leetcode> 。 目前已經 37K star 啦。 大家也可以關注我的公眾號《力扣加加》帶你啃下算法這塊硬骨頭。 ![](https://img.kancloud.cn/cf/0f/cf0fc0dd21e94b443dd8bca6cc15b34b_900x500.jpg)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看