动态规划(0-1背包)---字符串按单词列表分割

字符串按单词列表分割

139. Word Break (Medium)

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];
}

转载于:https://www.cnblogs.com/yjxyy/p/11121044.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值