diff --git a/src/main/java/leetcode/editor/cn/WordBreak.java b/src/main/java/leetcode/editor/cn/WordBreak.java new file mode 100644 index 0000000..dd5b1cb --- /dev/null +++ b/src/main/java/leetcode/editor/cn/WordBreak.java @@ -0,0 +1,65 @@ +//给定一个非空字符串 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 +// +// Related Topics 字典树 记忆化搜索 哈希表 字符串 动态规划 👍 1123 👎 0 + +package leetcode.editor.cn; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +//139:单词拆分 +class WordBreak { + public static void main(String[] args) { + //测试代码 + Solution solution = new WordBreak().new Solution(); + } + + //力扣代码 + //leetcode submit region begin(Prohibit modification and deletion) + class Solution { + public boolean wordBreak(String s, List wordDict) { + Set wordDictSet = new HashSet(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] && wordDictSet.contains(s.substring(j, i))) { + dp[i] = true; + break; + } + } + } + return dp[s.length()]; + } + } +//leetcode submit region end(Prohibit modification and deletion) + +} \ No newline at end of file