Word Break
DP
bool wordBreak(string s, unordered_set<string> &dict) { // Note: The Solution object is instantiated only once and is reused by each test case. //dp if(dict.find(s)!=dict.end()) return true; int n = s.size(); vector<vector<bool>> dp(n,vector<bool>(n,false)); int i,j,k; for(i=n-1;i>=0;i--) { if(dict.find(s.substr(i,1))!=dict.end()) dp[i][i] = true; for(j=i+1;j<n;j++) { if(dict.find(s.substr(i,j-i+1))!=dict.end()) { dp[i][j] = true; }else { for(k=i;k<j;k++) { if(dp[i][k]&&dp[k+1][j]) { dp[i][j] = true; break; } } } } } return dp[0][n-1]; }