LeetCode C 單詞拆分

2021-10-05 23:54:37 字數 1500 閱讀 9547

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

說明:

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

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

示例 1:

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

輸出: true

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

示例 2:示例 3:

輸入: s = 「catsandog」, worddict = [「cats」, 「dog」, 「sand」, 「and」, 「cat」]

輸出: false

思路:

方法1:採用遞迴的方法,使用函式f

ff,對於分割出的子串,若其存在在字典中,則對剩餘子串遞迴呼叫f

ff進行分割。但是這個方法存在很大的冗餘,因為找出的是乙個字典中的字串的組合(這個組合恰好能構成給定的字串s),這個冗餘需要想清楚。

方法2:動態規劃法。對於乙個字串子串,我們判斷其所有子串是否在字典中。比方法1少了組合這個性質,因而時間少。具體實現,我們使用 n+1大小陣列的dp ,其中 n 是給定字串s的長度。我們也使用 2 個下標指標 i 和 j ,其中 i 是當前字串從頭開始的子字串(s』)的長度, j 是當前子字串(s』)的拆分位置,拆分成 s1(0,j-1)和 s2(j,i-1)。為了求出 dp 陣列,我們初始化dp[0] 為true ,這是因為空字串總是字典的一部分。 dp 陣列剩餘的元素都初始化為 false。

**:

方法1:遞迴呼叫

這個**我測試沒通過,因為超出時間限制了。我也沒有再寫**去測試這段**,反正對不對我就丟在這裡了。

class

solution

else

else}}

}bool

wordbreak

(string s, vector

& worddict)

};

方法2:動態規劃

class

solution}}

return state[s.

length()

];}}

;

結果:方法二:動態規劃

[1] 乙個輸在起跑線的男人: 單詞拆分

LeetCode C 單詞接龍

給定兩個單詞 beginword 和 endword 和乙個字典,找到從 beginword 到 endword 的最短轉換序列的長度。轉換需遵循如下規則 每次轉換只能改變乙個字母。轉換過程中的中間單詞必須是字典中的單詞。說明 如果不存在這樣的轉換序列,返回 0。所有單詞具有相同的長度。所有單詞只由...

LeetCode C 單詞搜尋 II

給定乙個二維網格 board 和乙個字典中的單詞列表 words,找出所有同時在二維網格和字典 現的單詞。單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中 相鄰 單元格是那些水平相鄰或垂直相鄰的單元格。同乙個單元格內的字母在乙個單詞中不允許被重複使用。示例 輸入 words oath pea...

單詞拆分II LintCode

給一字串s和單詞的字典dict,在字串中增加空格來構建乙個句子,並且所有單詞都來自字典。返回所有有可能的句子。樣例 給一字串lintcode,字典為 de ding co code lint 則結果為 lint code lint co de 第一次 tle ifndef c582 h define...