每日AC--LeetCode-- wordBreak--动态规划

深入理解数据库原理
以实战为基础,以数据库原理为基础,结合实战,深入理解数据库原理。
wangxiaoming


每日AC--LeetCode-- wordBreak--动态规划


题目描述


Given a string s and a dictionary of words dict, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

For example, given
s ="leetcode",
dict =["leet", "code"].

Return true because"leetcode"can be segmented as"leet code".



AC代码:

import java.util.HashSet;
import java.util.Set;

/**
 * 类说明
 * 
 * <pre>
 * Modify Information:
 * Author        Date          Description
 * ============ =========== ============================
 * DELL          2017年8月28日    Create this file
 * </pre>
 * 
 */

public class WordBreak {
    
    
    /**
     * @param str
     * @param dict
     * @return
     * 动态规划,重要的是注重 状态转移方式,和状态转移方程的定义
     *  d[j] = 表示str(0,j)  是否可以分词 Boolean
     *  dp[i] = str[j]&& str[j][i] 表示 str(0, i) 是否可以分词
     */
    public static boolean wordBreak(String str, Set<String> dict){
        int len = str.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] && dict.contains(str.substring(j, i))){
                    dp[i] = true;
                }
            }
        }
        return dp[len];
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        String s = "leetcode";
        Set<String> set = new HashSet<String>();
        set.add("leet");
        set.add("code");
        boolean result = wordBreak(s, set);
        System.out.println("result:"+ result);
    }

}




wangxiaoming CSDN认证博客专家 架构 Spring Boot Redis
博客是很好的总结和记录工具,如果有问题,来不及回复,关注微信公众号:程序员开发者社区,获取我的联系方式,向我提问,也可以给我发送邮件,联系 1275801617@qq.com
©️2020 CSDN 皮肤主题: Age of Ai 设计师: meimeiellie 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值