c_cpp [dp] [dfs] [word break] [string]给定一个字符串s和一个单词字典dict,确定s是否可以被分割成空格分隔的seq
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp [dp] [dfs] [word break] [string]给定一个字符串s和一个单词字典dict,确定s是否可以被分割成空格分隔的seq相关的知识,希望对你有一定的参考价值。
// dp solution
bool word_break(const string& s, unordered_set<string>& dict) {
if(s.empty() || dict.empty()) return true;
vector<bool> dp(s.size()+1, false); // <---- why define a 'dp' of length N+1? because dp[i] means whether a string of length i can be segmented using dict
dp[0] = true; // cannot forget!
for(int i=1; i<=s.size(); i++) {
for(int j=0; j<i; j++) { // looping j from 0 to i-1 seems better
dp[i] = dp[j] && dict.find(s.substr(j+1, i-j)) != dict.end();
if(dp[i] == true) break;
}
}
return dp[s.size()];
}
// dfs
bool dfs(string s, unordered_set<string> &dict, int start_idx) {
if(start_idx >= s.size()) return true;
for(int j=start_idx; j<s.size(); j++) {
string t = s.substr(start_idx, j-start_idx+1);
if(dict.find(t) == dict.end()) continue;
if(dfs(s, dict, j+1)) return true;
}
return false;
}
bool word_break(string s, unordered_set<string> &dict) {
return dfs(s, dict, 0);
}
以上是关于c_cpp [dp] [dfs] [word break] [string]给定一个字符串s和一个单词字典dict,确定s是否可以被分割成空格分隔的seq的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp DFS
c_cpp 迭代DFS
c_cpp DFS
c_cpp 图表的DFS
c_cpp DFS
c_cpp 克隆图dfs