当前位置: 首页> 财经> 创投人物 > 邯郸网络科技_软件设计方法是什么_seo专业培训班_html制作网页代码

邯郸网络科技_软件设计方法是什么_seo专业培训班_html制作网页代码

时间:2025/7/9 13:08:52来源:https://blog.csdn.net/weixin_41554427/article/details/147195207 浏览次数:1次
邯郸网络科技_软件设计方法是什么_seo专业培训班_html制作网页代码

这道题用动态规划解决。

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet;for(string& word:wordDict){wordSet.insert(word);}int s_len = s.size();//s的下标从1开始起算,dp[j]表示s[1,j]能拆分成wordDict的组合vector<bool> dp(s_len+1,false);dp[0] = true;//表示空串for(int len = 1;len <= s_len;len++){//对s[1,len]遍历for(int i = 0;i < len;i++){//对s[1,len]的拆分点遍历if(dp[i] && wordSet.find(s.substr(i,len-i)) != wordSet.end()){dp[len] = true;break;}}}return dp[s_len];}
};

可以事先确定,wordDict中最长的单词的长度max_word_len。这样在考虑s.sub(i,len-i)时候,如果len-i大于max_word_len就可以直接跳过这种情况。

优化后的代码:

class Solution {
public:bool wordBreak(string s, vector<string>& wordDict) {unordered_set<string> wordSet;int max_word_len = 0;for(string& word:wordDict){wordSet.insert(word);if(word.size() > max_word_len) max_word_len = word.size();}int s_len = s.size();//s的下标从1开始起算,dp[j]表示s[1,j]能拆分成wordDict的组合vector<bool> dp(s_len+1,false);dp[0] = true;//表示空串for(int len = 1;len <= s_len;len++){//对s[1,len]遍历for(int i = 0;i < len;i++){//对s[1,len]的拆分点遍历if(len -i > max_word_len)continue;if(dp[i] && wordSet.find(s.substr(i,len-i)) != wordSet.end()){dp[len] = true;break;}}}return dp[s_len];}
};

关键字:邯郸网络科技_软件设计方法是什么_seo专业培训班_html制作网页代码

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: