zoukankan      html  css  js  c++  java
  • [LeetCode] 139. 单词拆分(DP)

    题目

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。

    说明:

    拆分时可以重复使用字典中的单词。
    你可以假设字典中没有重复的单词。
    示例 1:

    输入: s = "leetcode", wordDict = ["leet", "code"]
    输出: true
    解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
    示例 2:

    输入: s = "applepenapple", wordDict = ["apple", "pen"]
    输出: true
    解释: 返回 true 因为 "applepenapple" 可以被拆分成 "apple pen apple"。
      注意你可以重复使用字典中的单词。
    示例 3:

    输入: s = "catsandog", wordDict = ["cats", "dog", "sand", "and", "cat"]
    输出: false

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/word-break
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    题解

    • dp[i]表示子串[0,i)是否可以被完全拆分(初始化dp[0]=true,含义特例)
    • 状态转移方程:if (dp[j] && s.substring(j, i)在字典中) ,dp[i] = true
    • 时间复杂度O(n^2)
    • Boolean类型默认值为false

    代码

    class Solution {
        public  boolean wordBreak(String s, List<String> wordDict) {
    		boolean[] dp = new boolean[s.length() + 1];
    		dp[0] = true;
    		for (int i = 1; i <= s.length(); ++i) {
    			for (int j = 0; j < i; ++j) {
    				if (dp[j] && wordDict.contains(s.substring(j, i))) {
    					dp[i] = true;
    					break;
    				}
    			}
    		}
    		return dp[s.length()];
    	}
    }
    
  • 相关阅读:
    活学活用wxPython基础框架
    xpython在Windos下的安装及简单的文本打开、保存
    paramiko实现上传目录
    Python3结合paramiko执行命令
    openstry lua redis实现负载均衡
    定时重启tomcat
    简单的生成随机验证码
    第一个Python小项目:图片转换成字符图片
    Python小练习(二)
    Python小练习(一)
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11745423.html
Copyright © 2011-2022 走看看