• [leetcode]Word Break


    Word Break

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

    算法思路:

    思路1.dfs。肯定会超时,但是这里捡了leetcode的漏,本题case比较强的都是在结尾出现了坑,这道题偷懒,从后往前找单词。再递归。居然过了。。。。

     1 public class Solution {
     2     public boolean wordBreak(String s, Set<String> dict) {
     3         if(s.length() == 0) return true;
     4         for(String word : dict){
     5             if(s.endsWith(word)){
     6                 if(!wordBreak(s.substring(0, s.length() - word.length()),dict)) continue;
     7                 else return true;
     8             }
     9         }
    10         return false;
    11     }
    12 }

    思路2:既然递归超时,那就用DP吧,dp[i]表示前i长度字符串能否成功分解。

    代码如下:

     1 public class Solution {
     2     public boolean wordBreak(String s, Set<String> dict) {
     3         int length = s.length();
     4         if(length == 0) return true;
     5         boolean[] dp = new boolean[length + 1];
     6         dp[0] = true;
     7         for(int i = 0; i <= length; i++){
     8             if(!dp[i]) continue;
     9             for(String word:dict){
    10                 if(s.substring(i).startsWith(word)){
    11                     dp[i + word.length()] = true;
    12                 }
    13             }
    14         }
    15         return dp[length];
    16     }
    17 }
  • 相关阅读:
    小学生二元四则运算(F)
    补进度条
    附加作业
    个人总结
    第四 五周结对作业(照片)
    第四,五周——Java编写的电梯模拟系统(结对作业)
    第三周(JAVA编写的 wordcount)
    第三周续(读代码)
    第三周
    第二周续.(代码)
  • 原文地址:https://www.cnblogs.com/huntfor/p/3891374.html
Copyright © 2020-2023  润新知