leetcode139 單詞拆分

2021-10-03 20:16:54 字數 1063 閱讀 5412

根據題目可以試想,如果確定字串前 i 個字元能是worddict中的單詞,那麼只要半段第 i 個 字元以後的字串是否能夠拆分即可。因此可以採用遞迴的方式進行窮舉。

為了能夠更快的查詢到worddict是否包含字串,可以將worddict 轉換成hashset。

直接進行遞迴的時間複雜度為 o(n^n)

遞迴過程中會產生很多冗餘的計算,為了能夠減少冗餘計算,可以維持乙個memo陣列進行記憶,減少重複計算開銷

有記憶的遞迴時間複雜度為 o(n^2)

/**

* 有記憶遞迴

*/public

class

solution4

private

boolean

helper

(string s, set

worddict,

int start, boolean[

] memo)

} memo[start]

=false

;return

false;}

}

對於字串 s 可以拆分成兩個字串 s1 和 s2 ,如果 s1 和 s2 都能被拆分,那麼字串 s 也能拆分。因此,我們可以採用動態規劃的方式進行遍歷求解,維護乙個陣列 boolean dp[s.length() + 1],其中的第 i 個元素表示在第 i 個字元後便分割成兩個字串。其中dp[0] = true, 依次求出 dp 陣列中的每乙個元素,最終返回結果為 dp[s.length()]

時間複雜度為 o(n^2)

/**

* 動態規劃

*/public

class

solution5}}

return dp[s.

length()

];}}

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 解釋 返...

leetcode139 單詞拆分

給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,判定 s 是否可以被空格拆分為乙個或多個在字典 現的單詞。動態規劃,dp i 表示前i個字元能否被拆分 class solution def wordbreak self,s str,worddict list str bool ...