小米面试题:单词拆分
題目:
給定一個非空字符串 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
解題方案:動態規劃
//單詞拆分 //wordDict 單詞字典 //dp[i] 表示前一個字符能否被拆分成功字典中出現的單詞 //s 是源字符串 func wordBreak(s string, wordDict []string) bool {//定義一個mapwordDictSet := make(map[string]bool)for _, w := range wordDict {wordDictSet[w] = true //key是每個單詞}dp := make([]bool, len(s) + 1)dp[0] = truefor i := 1; i <= len(s); i++ {for j := 0; j < i; j++ {if dp[j] && wordDictSet[s[j:i]] {dp[i] = truebreak}}}return dp[len(s)] }依次遍歷0~i之間的字符串,每次判斷0~i之間的字符串是否滿足字典里面的要求。d[j]保留了前j字符對應的狀態,wordDictSet[s[j:i]]為最后一個字符串的狀態,最后一個字符串前面所有的字符串都可以通過d[j]來判斷是否滿足條件。
如果有匹配,則返回對應dp下標對應的狀態。
時間復雜度:O(n^2)
空間復雜度:O(n)
?
?
參考地址:https://leetcode-cn.com/problems/word-break/solution/dan-ci-chai-fen-by-leetcode-solution/
?
?
?
總結
以上是生活随笔為你收集整理的小米面试题:单词拆分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: linux下cd命令
- 下一篇: linux命令more