• [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()];
    	}
    }
    
  • 相关阅读:
    day38 04-Spring加载配置文件
    day38 03-Spring的IOC和DI的区别
    day38 02-Spring快速入门
    关于mysql-connector-net在C#中的用法
    SQL的四种连接用法整理
    SQL的四种连接用法整理
    SQL的四种连接用法整理
    45道CSS基础面试题
    45道CSS基础面试题
    45道CSS基础面试题
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11745423.html
Copyright © 2020-2023  润新知