給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。
想到了單詞拆分,可以用動態規劃先判斷字串s中每個位置i是否可以拆分為單詞,dp[i]表示[0, i)可以拆分,然後就可以根據dp[i]來解決這個問題。
具體而言,我們可以判斷[i, end)組成的單詞是否存在於字典中,若存在,並且dp[i]為true,就說明存在乙個方案,可以把[i, end)組成的單詞加入到臨時答案陣列tmp中,然後在遞迴地對[0, i)開始判斷處理,遞迴結束條件,當i為0時,證明拆分完畢,可以把臨時答案陣列tmp的結果輸出到最後返回陣列ans中。
class
solution
int n = s.
size()
;//動態規劃判斷能否拆分
vector<
bool
>
dp(n +1,
false);
dp[0]
=true
;for
(int i =
1; i <= n; i++)}
} vector ans;
//可以拆分才開始遞迴
if(dp[n]
)return ans;
}void
dfs(string s, unordered_set
& worddictset,
int n, vector<
bool
>
& dp, vector
& tmp, vector
& ans)
} ans.
push_back
(s1)
;return;}
//從後往前遞迴
for(
int j = n -
1; j >=
0; j--)}
}}};
140 單詞拆分 II
給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog worddict cat ca...
140 單詞拆分 II
140.單詞拆分 ii 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 分隔時可以重複使用字典中的單詞。你可以假設字典中沒有重複的單詞。示例 1 輸入 s catsanddog wor...
140 單詞拆分 II
題目描述 給定乙個非空字串 s 和乙個包含非空單詞列表的字典 worddict,在字串中增加空格來構建乙個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。說明 示例 1 輸入 s catsanddog worddict cat cats and sand dog 輸出 cats and...