(算法)Word Break
题目:
Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.
For example, given
s = "leetcode"
,
dict = ["leet", "code"]
.
Return true because "leetcode"
can be segmented as "leet code"
.
思路:
1、DFS
2、动态规划
代码:
#include<iostream> #include<unordered_set> #include<vector> using namespace std; // dp bool WordBreak_dp(string s,unordered_set<string> &wordDict){ int n=s.size(); vector<bool> dp(n+1,false); dp[0]=true; for(int i=0;i<n;i++){ for(int j=i;j>=0;j--){ if(!dp[j]) continue; if(wordDict.find(s.substr(j,i-j+1))!=wordDict.end()){ dp[i+1]=true; break; } } } return dp[n]; } // dfs bool WordBreak_dfs(string s,unordered_set<string> &wordDict){ if(s=="") return true; for(int i=0;i<s.size();i++){ if(wordDict.find(s.substr(0,i+1))!=wordDict.end()){ if(WordBreak_dfs(s.substr(i+1),wordDict)) return true; } } return false; } int main(){ unordered_set<string> wordDict; wordDict.insert("leet"); wordDict.insert("code"); string s; while(cin>>s){ cout<< WordBreak_dp(s,wordDict) <<endl; cout<< WordBreak_dfs(s,wordDict) <<endl; } return 0; }