Word Break LeetCode Java

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".

Have you been asked this question in an interview?

 Idea: Dynamic programming + Nested Loop
      Create the DP table to store results of sub-problems.
      The value res[i] will be true if str[0..i-1]
      can be segmented into dictionary words,
      otherwise false.

    Steps in detail:
    outer loop: i start from 0 to N
    inner loop: j start from 0 to i
    res[i+1]<- true iff res[j]<-true and dict contain this word

 public static boolean wordBreak(String s, Set<String> dict) {
        if(s==null || s.length()==0) return true;
        int len=s.length();
        boolean res[]=new boolean[len+1];
        //initial res[0]
        res[0]=true;
        for(int i=0;i<len;i++){
            StringBuilder tempStr=new StringBuilder(s.substring(0,i+1));
            for(int j=0;j<=i;j++){
                if(res[j] && dict.contains(tempStr.toString())){
                    res[i+1]=true;
                    break;
                }
                tempStr.deleteCharAt(0);
            }
        } 
          /*  For the case of str="leetcode"  dict="leet", "code"
          res= [true, false, false, false, true, false, false, false, true]
          after the nested loop
             */
        return res[len];
    }


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值