Leetcode139題 單詞拆分

2021-10-02 19:06:31 字數 1309 閱讀 9598

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典**現的單詞。

說明:拆分時可以重複使用字典中的單詞。

你可以假設字典中沒有重複的單詞。

示例 1:

輸入: s = 「leetcode」, worddict = [「leet」, 「code」]

輸出: true

解釋: 返回 true 因為 「leetcode」 可以被拆分成 「leet code」。

一開始的思想是逐個去遍歷,去判斷,但這肯定不行,後來看了一些部落格,可以利用動態規劃的思想。

定義乙個bool型別的陣列dp,dp[4] = true表示s的前四個字元在字典當中。例如題目中所給的leetcode,前四個字元『leet』在字典當中,所以dp[4]=true.

我是用c++去解該題,dp陣列可以定義為:

vector dp(s.size(), false);並且dp[0]初始化為false。`

bool

wordbreak

(string s, vector

& worddict)

int n = s.

size()

; vector<

bool

>

dp(n+1,

false);

unordered_set

dict

(worddict.

begin()

, worddict.

end())

; dp[0]

=true

;for

(int i =

0; i <= n;

++i)}}

return dp[n]

程式當中,分為3個部分:

1. 首先判斷所給的字串和字典是否為空,為空的話直接返回。

2. 定義一些必要的變數,其中使用到了unordered_set,我們將字典存入其中。

3. 兩個巢狀的for迴圈

當我們得到dp[j]=true時,我們需要判斷字串中下標j和i之間的字元是否在字典當中(遍歷著判斷,即字元的長度逐漸減少 substr(j, i-j),i不變,j每次加1)。當兩個條件都滿足時,dp[i]賦值為true,並且立即退出for迴圈,然後對i加1.

因為第乙個for中i初始為0,第二個for的i初始也為0,不滿足第二個for中j注意:dp[j]和substr(j, 3)的下標雖然數字一樣,但意義不同:

dp[j]是指s的前j個元素,而substr(j, 3)是指字串s中的第j+1個字元。

leetcode 139 單詞拆分(好題!)

139.單詞拆分 難度中等340 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。說明 示例 1 輸入 s leetcode worddict leet code 輸出 true解釋 返回 true 因為 leetcod...

leetcode 139 單詞拆分

題目 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,確定 s 是否可以被空格分割為乙個或多個在字典裡出現的單詞。你可以假設字典中無重複的單詞。例如,給出 s leetcode dict leet code 返回 true 因為 leetcode 可以被切分成 leet cod...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典中出現的單詞。說明 拆分時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s leetcode worddict leet code 輸出 true 解釋 返...