zoukankan      html  css  js  c++  java
  • 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".
    

    Example 2:

    Input: s = "applepenapple", wordDict = ["apple", "pen"]
    Output: true
    Explanation: Return true because "applepenapple" can be segmented as "apple pen apple".
                 Note that you are allowed to reuse a dictionary word.
    

    Example 3:

    Input: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
    Output: false






    dp[i]  0-i这个字符串是否满足wordbreak

    dp[0] = 0

    dp[1] =dp[0] && s[0:1] in dict

    dp[2] =dp[0] && s[0:1] in dict  ||  dp[1] && s[1:2] in dict

    dp[3] =dp[0] && s[0:3] in dict  ||  dp[1] && s[1:3] in dict ||  dp[2] && s[2:3] in dict

    dp[i] =dp[0] && s[0:i] in dict || ,,,,,,,||dp[i-1]&& s[i-1:i] in dict

    
    

    Time complexity O(n^2)

    Space complexity O(n)

    语法注意:

    s = "abcde"; 要得到”ce“

    string word = s.substr(2,2);

     1 class Solution {
     2 public:
     3     bool wordBreak(string s, vector<string>& wordDict) {
     4         vector<bool> dp(s.size()+1,false);
     5         unordered_set<string>dict(wordDict.begin(),wordDict.end());
     6         dp[0] = true;
     7         for(int i = 1 ; i<=s.size();i++){
     8             for(int j = 0;j<i;j++){
     9                 string word = s.substr(j,i-j);
    10                 if(dp[j]&&dict.find(word)!=dict.end()){
    11                     cout<<word<<endl;
    12                     dp[i] = true;
    13                     break;
    14                 }
    15             }
    16         }
    17         return dp[s.size()];
    18     }
    19 };




    参考:
    http://zxi.mytechroad.com/blog/leetcode/leetcode-139-word-break/





  • 相关阅读:
    Python面向对象-类成员
    python面向对象-继承
    Linux 静态和动态添加路由
    Linux 添加虚拟网卡
    centos7源码包安装Mongodb,并设置开机自启动
    centos7配置静态ip地址
    Python开发【前端篇】JavaScript和Jquery
    Python爬虫【解析库之pyquery】
    Python爬虫 selenium
    Python爬虫【解析库之beautifulsoup】
  • 原文地址:https://www.cnblogs.com/zle1992/p/10271444.html
Copyright © 2011-2022 走看看