• leetcode 单词拆分 II java


    题目:

    给定一个非空字符串 s 和一个包含非空单词列表的字典 wordDict,在字符串中增加空格来构建一个句子,使得句子中所有的单词都在词典中。返回所有这些可能的句子。

    说明:

    • 分隔时可以重复使用字典中的单词。
    • 你可以假设字典中没有重复的单词。

    示例 1:

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

    示例 2:

    输入:
    s = "pineapplepenapple"
    wordDict = ["apple", "pen", "applepen", "pine", "pineapple"]
    输出:
    [
      "pine apple pen apple",
      "pineapple pen apple",
      "pine applepen apple"
    ]
    解释: 注意你可以重复使用字典中的单词。
    

    示例 3:

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

    解题:

    class Solution {
        private Map<String, List<String>> map = new HashMap<>();
        public List<String> wordBreak(String s, List<String> wordDict) {
            if (map.containsKey(s)) //如果包含 则直接返回s
                return map.get(s);
            List<String> list = new ArrayList<>();
            if (s.length() == 0) {
                list.add("");
                return list;
            }
            for (String word : wordDict) {
                if (s.startsWith(word)) {//判断s是否含有word的前缀
                    List<String> tmpList = wordBreak(s.substring(word.length()), wordDict);
                    for (String tmp : tmpList)
                        list.add(word + (tmp.equals("") ? "" : " ") + tmp);//空的话则""结尾    
                }
            }
            map.put(s, list);//记录可以拆分的字符串,并且记录拆分的方法
            return list;
        }
    }
  • 相关阅读:
    C++高精度乘法
    经典的7种排序算法 原理C++实现
    c++ STL
    二分查找c++
    洛谷P1111 修复公路
    01背包写法
    c++编码规范
    github教程
    windows10锁定屏幕聚焦图片导出
    week 6 Spring history and design philosophy
  • 原文地址:https://www.cnblogs.com/yanhowever/p/10950763.html
Copyright © 2020-2023  润新知