• [leetcode]139. Word Break单词能否拆分


    Given a non-empty string s and a dictionary wordDict containing a list of non-empty words, determine if s can be segmented into a space-separated sequence of one or more dictionary words.

    Note:

    • The same word in the dictionary may be reused multiple times in the segmentation.
    • You may assume the dictionary does not contain duplicate words.

    Example 1:

    Input: s = "leetcode", wordDict = ["leet", "code"]
    Output: true
    Explanation: Return true because "leetcode" can be segmented as "leet code".

    题意:

    给定字符串S和字典wordDict, 判断字符串S是否能由字典中的单词组合而成

    思路:

    用一维boolean数组记录是否能字符串S是否能被分隔

               l       e      e      t       c      o      d     e 

    T F F F F F F F F
    0 1 2 3 4 5 6 7 8

      dp[0]初始化为true, 其他为default的false

      dp[s.length() + 1]

     

    i = 1         j = 1,  dp[1] 为default F, 没必要再去验证wordDict.contains(s.substring(j,i))

                   j = 0,  dp[0] 为 T , 验证wordDict.contains(s.substring(0,1)) 为F

    i = 2        j = 2,  dp[2] 为default F

                  j = 1,  dp[1] 为default F

          j = 0,  dp[0] 为 T , 验证wordDict.contains(s.substring(0,2)) 为F

    i = 3        j = 3,  dp[3] 为default F

                  j = 2,  dp[2] 为default F

                  j = 1,  dp[1] 为default F

          j = 0,  dp[0] 为 T , 验证wordDict.contains(s.substring(0,3)) 为F

    i = 4       j = 4, dp[4]为default F

         j = 3,  dp[3] 为default F

                  j = 2,  dp[2] 为default F

                  j = 1,  dp[1] 为default F

          j = 0,  dp[0] 为 T , 验证wordDict.contains(s.substring(0,4)) 为T  ----> 更新dp[4] = true

    T F F F T F F F F
    0 1 2 3 4 5 6 7 8

     

     

                  

     

     

    代码:

     1 class Solution {
     2     public boolean wordBreak(String s, List<String> wordDict) {
     3         // corner case 
     4         if (s == null || s.length() < 1 || wordDict == null || wordDict.size() < 1) {
     5             return false;
     6         }  
     7         boolean[] dp = new boolean[s.length() + 1];
     8         dp[0] = true;
     9         //外层循环scan字符串S
    10         for(int i = 1; i <= s.length(); i++ ){
    11             //内层循环找分割点
    12             for(int j = i; j >= 0; j--){
    13                 if(dp[j] && wordDict.contains(s.substring(j,i))){
    14                     dp[i] = true;
    15                 }
    16             }
    17         }
    18         return dp[s.length()];
    19     }
    20 }
  • 相关阅读:
    pygame “音乐盒”---- 播放一首歌& 点击对话框后背景以及对话框大小改变
    虚拟机VMware里 windows server 2003 扩充C盘方法
    pygame简单动态图 & 动态图片的移动
    用C++ 自娱自乐
    Linux学习笔记----(2)
    Linux学习笔记--(1)
    JSON.stringify语法解析(自己留存)
    css 框架——base.css,作用是重设浏览器默认样式和提供通用原子类。自己留存
    div里嵌套了img底部会有白块问题和图片一像素问题解决
    全面解析Linux数字文件权限
  • 原文地址:https://www.cnblogs.com/liuliu5151/p/9075032.html
Copyright © 2020-2023  润新知