代码随想录训练营第46天|139.单词拆分

代码随想录训练营第46天|139.单词拆分

139.单词拆分

文章

代码随想录|0139.单词拆分

思路

外层遍历字符串长度,内层遍历单词列表,当且仅当背包长度与单词长度之间差值对应部分恰好等于当前单词时为true
d p [ i ] = d p [ i − l e n ] ∧ m a t c h ( s . s u n s t r ( i − l e n , l e n ) , w o r d ) dp[i]=dp[i-len] \land match(s.sunstr(i-len, len), word) dp[i]=dp[ilen]match(s.sunstr(ilen,len),word)

代码

class Solution {
    public boolean wordBreak(String s, List<String> wordDict) {
        int i, j, n;
        n = s.length();
        boolean[] dp = new boolean[n + 1];
        int shortest, longest;
        int len;
        dp[0] = true;
        for (i = 1; i < n + 1; ++i) {
            for (String word: wordDict) {
                len = word.length();
                if (i >= len && dp[i - len] && match(s, i - len, word)) {
                    dp[i] = true;
                    break;
                }
            }
        }
        return dp[n];
    }
    public boolean match(String s, int start, String pattern) {
        int offset, len;
        len = pattern.length();
        if (s.length() - start < len) {
            return false;
        }
        for (offset = 0; offset < len; ++offset) {
            if (s.charAt(offset + start) != pattern.charAt(offset)) {
                return false;
            }
        }
        return true;
    }
}

总结

先做题再看讲解
大差不差

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值