当前位置:网站首页>leetcode:139. 单词拆分
leetcode:139. 单词拆分
2022-08-03 02:04:00 【OceanStar的学习笔记】
题目来源
题目描述
题目解析
暴力超时
思路
递归树:
class Solution {
bool process(string &s, int start, std::set<std::string> &dict){
int N = s.size();
if(start == N){
return true;
}
for (int end = start; end < N; ++end) {
std::string prefix = s.substr(start, end - start + 1);
if(dict.count(prefix) && process(s, end + 1, dict)){
return true;
}
}
return false;
}
public:
bool wordBreak(string s, vector<string>& wordDict) {
std::set<std::string> dict;
for(auto &w : wordDict){
dict.insert(w);
}
return process(s, 0, dict);
}
};
加备忘录过。
动态规划
class Solution {
public:
bool wordBreak(string s, vector<string>& wordDict) {
std::set<std::string> dict;
for(auto &w : wordDict){
dict.insert(w);
}
int N = s.size();
std::vector<bool> dp(N + 1, false);
dp[N] = true;
for (int start = N - 1; start >= 0; --start) {
for (int end = start; end < N; ++end) {
std::string prefix = s.substr(start, end - start + 1);
if(dict.count(prefix) && dp[end + 1]){
dp[start] = true;
break;
}
}
}
return dp[0];
}
};
前缀树优化
class Solution {
struct Node{
bool end;
std::vector<Node *> nexts;
Node(){
end = false;
nexts.resize(26);
}
};
public:
bool wordBreak(string s, vector<string>& wordDict) {
Node *root = new Node();
for(auto &w : wordDict){
Node *node = root;
int idx = 0;
for (char i : w) {
idx = i - 'a';
if(node->nexts[idx] == nullptr){
node->nexts[idx] = new Node();
}
node = node->nexts[idx];
}
node->end = true;
}
int N = s.size();
std::vector<bool> dp(N + 1, false);
dp[N] = true;
for (int start = N - 1; start >= 0; --start) {
Node *curr = root;
for (int end = start; end < N; ++end) {
char ch = s[end];
curr = curr->nexts[ch - 'a'];
if(curr == nullptr){
break;
}
if(curr->end && dp[end + 1]){
// i...end 真的是一个有效的前缀串 end+1.... 能不能被分解
dp[start] = true;
break;
}
}
}
return dp[0];
}
};
边栏推荐
猜你喜欢
随机推荐
钻石基础知识介绍
问题记录:jenkins构建时报错The goal you specified requires a project to execute but there is no POM in...
win下使用vscode+wsl2
有趣简单的M2处理器性能实验:Swift与C代码执行速度的比较
Excel 如何比较两列字符串是否相同?
流程图(1)
企业云成本管控,你真的做对了吗?
Conversational Technology!
Wei Dongshan Digital Photo Frame Project Learning (5) Transplantation of libjpeg-turbo
QCheckBox、margin、border、pandding、QHoxLayout、QSplitter、QSpacerItem
【面经】被虐了之后,我翻烂了equals源码,总结如下
vs studio 安装opencv 环境
数据中台建设(八):数据服务体系建设
常用工具链和虚拟环境-msys2与mingw
vs studio install opencv environment
自定义RunTimeException工具类
IDEA基本使用-创建和删除项目
【社媒营销】Facebook速推帖子如何运作?值得吗?
五大靠谱的婚恋相亲APP详细特点缺点分析!
mysql binlog日期解析成yyyy-MM-dd