首页 > 代码库 > LeetCode "Word Break"
LeetCode "Word Break"
My first solution was DFS - TLE. Apparently, DFS with TLE usually means DP.
1D DP + Rolling Array:
class Solution {public: bool wordBreak(string s, unordered_set<string> &dict) { int len = s.length(); int lend= dict.size(); if(len == 0 || lend == 0) return false; // Init vector<bool> rec0, rec1; rec0.resize(len); rec1.resize(len); std::fill(rec0.begin(), rec0.end(), false); std::fill(rec1.begin(), rec1.end(), false); // vector<bool> &pre = rec0; vector<bool> &post = rec1; // Start from 0 for(int i = 1; i <= len; i ++) { string sub = s.substr(0, i); if(dict.find(sub) != dict.end()) { pre[i-1] = true; if(i == len) return true; } } for(int i = 1; i < len; i ++) // vertical { for(int j = 0; j < len; j ++) // horizontal { if(pre[j]) { for(int k = 1; k < len - j; k ++) { string sub = s.substr(j + 1, k); if(dict.find(sub) != dict.end()) { post[j + k] = true; if((j + k + 1) == len) return true; } } } } // Rolling array if(i % 2) { pre = rec1; post = rec0; } else { pre = rec0; post = rec1; } } return false; }};
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。