动态规划(0-1背包)---字符串按单词列表分割
字符串按单词列表分割
s = "leetcode",
dict = ["leet", "code"].
Return true because "leetcode" can be segmented as "leet code".
题目描述:
给定一个字符串和一个单词数组,判断字符串是否能被单词数组中的单词分割
思路分析:
dict 中的单词没有使用次数的限制,因此这是一个完全背包问题。该问题涉及到字典中单词的使用顺序,因此可理解为涉及顺序的完全背包问题。求解顺序的完全背包问题时,对物品的迭代应该放在最里层。dp[i]表示字符串的前i个字符能否由单词列表分割。
代码:
public boolean wordBreak(String s,List<String>wordDict){
int n=s.length();
boolean []dp=new boolean[n+1];
dp[0]=true;
for(int i=1;i<=n;i++){
for(String word:wordDict){
int len=word.length();
if(len<=i&&word.equals(s.substring(i-len,i))){
dp[i]=dp[i]||dp[i-len];
}
}
}
return dp[n];
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步