单词分割 java_Leetcode 139 单词拆分 JAVA

最能想到的是暴力的方法。 动态规划在这里是最有效果的解法。

时间复杂度为 O( n )。

n = 0 的时候, f 为 true。

n = 1 的时候, 只需要判断第一个字母是否在字典里。设置一个结果为 true。

n = 2 的时候, 需要判断 0 - 1 个字母,也就是 f(1) 是否为 true, 其次还要判断第二个字母是否在字典。

推广到 第 j 个字母的时候,0 - j 个字母,也就是 f ( j )是否为 true,这是第一个条件。第二个条件是:i - j 这个串是否在字典中,如果在字典中,那么 f ( i )就为 true。

否则为 false。

最后结果是 f ( len )的 Boolean 值。

这里还有两个知识点

1.list 集合里面有一个函数 contains ( a )。如果元素 a 在list 这个集合中,返回值为 true ,不在的话返回值就为 false。

2.string里面有一个函数,substring(i, j),将串里面从 i 到 j 的序列拿出来,作为返回值。

代码:

class Solution {

public boolean wordBreak(String s, List wordDict) {

int len = s.length();

boolean []dp = new boolean[len+1];

dp[0] = true;

for(int i = 1; i <= len; i++)

for(int j = 0; j < i; j++){

if(dp[j] && wordDict.contains(s.subSequence(j,i))){

dp[i] = true;

break;

}

}

return dp[len];

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值