[LeetCode] 0140.ワードブレイクii

Python、C++、JavaScript、SQL、TypeScript の多様な LeetCode ソリューションを探索してください。面接の準備、学習、複数のプログラミング言語でのコードの練習に最適です。 Github リポジトリ リンク

難しい

 


文字列を与える s そして文字列の辞書 単語辞書、スペースを追加します s 各単語が有効な辞書単語である文を構築するには、そのような考えられるすべての文を返します。 任意の注文.

注記 辞書内の同じ単語がセグメンテーションで複数回再利用される可能性があること。

例 1:

入力: s = "猫と犬", wordDict = ["猫","猫","そして","砂","犬"]
出力: 【「猫と犬」「猫砂犬」】

例 2:

入力: s = "パイナップルペナップル", wordDict = ["アップル","ペン","アップルペン","パイン","パイナップル"]
出力: [「パインアップルペンアップル」、「パイナップルペンアップル」、「パインアップルペンアップル」]
説明: 辞書の単語を再利用できることに注意してください。

例 3:

入力: s = "catsandog", wordDict = ["cats","dog","sand","and","cat"]
出力: []

制約:

  • 1 <= s.length <= 20
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 10
  • s そして wordDict[i] 小文字の英字のみで構成されています。
  • のすべての文字列 単語辞書 は 個性的.
  • 入力は、回答の長さが 10 を超えないように生成されます。5.

パイソン

				
					# 時間計算量: O(2^n) # 空間計算量: import List クラスの入力による O(2^n) 解決策: def wordBreak(self, s: str, wordDict: List[str]) -> List[str]: word_set = set(wordDict) memoization = {} return self._dfs(s, word_set, memoization) def _dfs(self, RemainingStr: str, wordSet: set, memoization: dict) -> List[str]: メモ化に残っているStrの場合: missingStr でない場合は、memoization[remainingStr] を返します。 range(1, len(remainingStr) + 1) 内の i の場合、[""] 結果 = [] を返します。wordSet 内の currentWord の場合、currentWord = RemainingStr[:i] を返します。 _dfs(remainingStr[i:], wordSet, memoization): results.append( currentWord + (" " if nextWord else "") + nextWord) memoization[remainingStr] = 結果は結果を返します s = "catsanddog" wordDict = ["cat" 、「猫」、「と」、「砂」、「犬」] print(Solution().wordBreak(s, wordDict))
				
			
ja日本語