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