刷题139. Word Break
一、题目说明
题目139. Word Break,判断一个非空字符串是否能由字典中的字符串拼接成。难度是Medium!
二、我的解答
尽管这个题目难度是Medium,遗憾的是没做出来。
用回溯方法,从字符串s的第0个位置开始,...如果s[0]在dict中出现,继续查找。回溯法会超时的,这里用visited数组表示是否使用过。
class Solution{ public: // 回溯法,用visited裁剪 回溯的对象是s[0,1,...] bool wordBreak(string s, vector<string>& wordDict){ if(s.empty()) return true; int n = s.size(); //vector[i]表示从i下标开始的字符串的访问状态,0 表示未访问过,1 访问过但不可拆分 2 访问过且可拆分 vector<int> visited(n,0); if(dfs(s,wordDict,visited,0)){ return true; } return false; } bool dfs(string s,vector<string>& wordDict,vector<int>& visited,int begin){ if(begin == s.size()) return true; for(int i=1;i<=s.size();i++){ string temp = s.substr(begin,i); // 若已经访问过 判是否可达 if(visited[begin] !=0){ return visited[i]==2; } // 未访问过 for(auto word:wordDict){ if(word.compare(temp)==0){ if(dfs(s,wordDict,visited,begin+i)){ visited[begin] = 2; return true; } } } } visited[begin] = 1; return false; } };
性能如下:
Runtime: 80 ms, faster than 5.58% of C++ online submissions for Word Break. Memory Usage: 20.1 MB, less than 5.66% of C++ online submissions for Word Break.
三、优化措施
这个题目,用dp方法非常合适:
class Solution{ public: //dp solution:dp[i] means s[0..i] 能否有字典组成 //dp[0] means "" can be made by dict bool wordBreak(string s, vector<string>& wordDict){ vector<bool> dp(s.size()+1,false); dp[0] = true; for(int i=1;i<=s.size();i++){ for(auto word: wordDict){ int ws = word.size(); if(i>=ws){ int cur = s.compare(i-ws,ws,word); if(dp[i-ws] && cur==0){ dp[i] = true; } } } } return dp[s.size()]; } };
优化措施:
Runtime: 8 ms, faster than 77.10% of C++ online submissions for Word Break. Memory Usage: 8.8 MB, less than 94.34% of C++ online submissions for Word Break.
所有文章,坚持原创。如有转载,敬请标注出处。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· .NET 进程 stackoverflow异常后,还可以接收 TCP 连接请求吗?
· SQL Server统计信息更新会被阻塞或引起会话阻塞吗?
· 本地部署 DeepSeek:小白也能轻松搞定!
· 传国玉玺易主,ai.com竟然跳转到国产AI
· 自己如何在本地电脑从零搭建DeepSeek!手把手教学,快来看看! (建议收藏)
· 我们是如何解决abp身上的几个痛点
· 如何基于DeepSeek开展AI项目