leetcode 140. 單詞拆分 II(記憶化)

給定一個非空字符串 s 和一個包含非空單詞列表的字典 wordDict,在字符串中增加空格來構建一個句子,使得句子中所有的單詞都在詞典中。返回所有這些可能的句子。

說明:

分隔時可以重復使用字典中的單詞。
你可以假設字典中沒有重復的單詞。
示例 1:

輸入:
s = “catsanddog”
wordDict = [“cat”, “cats”, “and”, “sand”, “dog”]
輸出:
[
“cats and dog”,
“cat sand dog”
]

代碼

class Solution {Map<Integer,List<List<String>>> listMap=new HashMap<>();public List<String> wordBreak(String s, List<String> wordDict) {Trie trie=new Trie();Set<Integer> set=new HashSet<>();for(String c:wordDict) {set.add(c.length());trie.insert(c);}List<String> ret=new ArrayList<>(); List<List<String>> resss=awordBreak(s,0,trie,set);for(java.util.List<String> list:resss) ret.add(String.join(" ",list));//添加空格return ret;}public List<List<String>> awordBreak(String s, int loc,Trie trie,Set<Integer> set) {if(!listMap.containsKey(loc)){List<List<String>> temp=new LinkedList<List<String>>();if(loc==s.length())temp.add(new ArrayList<>());for(int c:set)//測試字典的所有單詞{if(loc+c<=s.length()){String need=s.substring(loc,loc+c);if(trie.search(need)){//該單詞合法List<List<String>> nexts=   awordBreak(s,loc+c,trie,set);//遞歸獲取字符串后部分返回的單詞序列for(List<String> list:nexts)//將不同的單詞序列與當前單詞連接{LinkedList<String> next=new LinkedList<>(list);next.offerFirst(need);temp.add(next);}}}}listMap.put(loc,temp);}return listMap.get(loc);}class TrieNode {//字典樹private TrieNode[] links;private final int  r=26;private boolean isEnd;public TrieNode() {this.links = new TrieNode[r];}public boolean contains(char c) {return links[c-'a']!=null;}public void put(char c,TrieNode node) {links[c-'a']=node;}public TrieNode get(char c) {return links[c-'a'];}public boolean isEnd() {return isEnd;}public void setEnd() {isEnd = true;}}class  Trie{private TrieNode root;public Trie() {this.root = new TrieNode();}public void insert(String s){TrieNode cur=root;for(int i=0;i<s.length();i++){if(!cur.contains(s.charAt(i))){cur.put(s.charAt(i),new TrieNode());}cur=cur.get(s.charAt(i));}cur.setEnd();}public boolean search(String s){TrieNode cur=root;for(int i=0;i<s.length();i++){if(cur.contains(s.charAt(i))){cur=cur.get(s.charAt(i));}else return false;}return cur.isEnd;}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/392730.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/392730.shtml
英文地址,請注明出處:http://en.pswp.cn/news/392730.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

java mvp開發_如何從沒有軟件開發技能的想法變成現實的市場MVP???

java mvp開發by Mike Williams由Mike Williams 如何從沒有軟件開發技能的想法變成現實的市場MVP&#xff1f;?&#xff1f; (How to go from idea to live marketplace MVP with no software development skills ???) Online marketplaces such as Airbnb, Turo, Hipcamp,…

Convolutional neural networks for artistic style transfer

https://harishnarayanan.org/writing/artistic-style-transfer/ 轉載于:https://www.cnblogs.com/guochen/p/6888478.html

Centos 安裝 禪道

Centos 安裝 禪道 一、環境準備&#xff1a; 1、服務器&#xff1a;Centos6.7 新系統 2、查看對應的系統版本&#xff1a;uname -a和cat /etc/redhat CentOS release 6.7 (Final) 二、安裝&#xff1a; 1、下載對應系統版本的zbox禪道一鍵安裝包&#xff0c;解壓至/opt目錄下 …

centos7修改服務器密碼忘記,Centos7忘記root密碼怎么修改

Centos7忘記root密碼怎么修改一、 reboot重啟機器&#xff0c;當出現引導界面時&#xff0c;按e進入內核編輯界面。二、 往下翻&#xff0c;到LANGzh_CN.UTF-8后面添加 \rd.break(別忘了空格)三&#xff0c; 修改完成后&#xff0c;按下CtrlX組合鍵來運行這個修改后的內核程序(…

1.移動端測試知識筆記(面試必備,測試點,adb命令)

移動端測試&#xff1a; 移動應用&#xff0c;特性(功能) 滿足 需求(產品文檔&#xff0c;隱性需求) 一。App功能測試&#xff1a; 死活背下來1.業務邏輯正確性測試&#xff1a; 產品文檔&#xff0c;隱性需求- 寫成測試用例 2.兼容性測試&#xff1a; 1.系統版本&#xff1a…

Day 3 網絡基礎

網絡基礎 一、什么是互聯網協議及為何要有互聯網協議 &#xff1f; 互聯網協議&#xff1a;指的就是一系列統一的標準&#xff0c;這些標準稱之為互聯網協議。互聯網的本質就是一系列的協議&#xff0c;總稱為‘互聯網協議’&#xff08;Internet Protocol Suite)。 互聯網協議…

leetcode 349. 兩個數組的交集

給定兩個數組&#xff0c;編寫一個函數來計算它們的交集。 示例 1&#xff1a; 輸入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 輸出&#xff1a;[2] 示例 2&#xff1a; 輸入&#xff1a;nums1 [4,9,5], nums2 [9,4,9,8,4] 輸出&#xff1a;[9,4] 代碼 class Solution…

a4988 脈寬要求_基于STM32的微型步進電機驅動控制器設計

基于STM32的微型步進電機驅動控制器設計摘 要&#xff1a; 設計了一種微型步進電機驅動控制器&#xff0c;通過上位機界面修改步進電機轉速、旋轉角度、細分系數。該設計以STM32F103T8U6作為主控制器&#xff0c;以A4988步進電機驅動設備&#xff0c;上位機串口界面作為人機接口…

運行linux的機器死機了_如何在任何機器上輕松運行任何Linux工具

運行linux的機器死機了by Flavio De Stefano由弗拉維奧德斯特凡諾(Flavio De Stefano) 如何在任何機器上輕松運行任何Linux工具 (How to easily run any Linux tool on any machine) Have you ever encountered a situation like the ones below?您是否遇到過以下情況&#x…

【實戰】爛泥:一次糾結的系統安裝

這應該是昨天的事了&#xff0c;因為昨天太忙了&#xff0c;就沒有貼出來&#xff0c;今天下午我想了想還是貼出來吧。一是給自己一個提醒&#xff0c;二是也給壇子里面的午飯們再以后安裝系統中提供一種思路。 環境&#xff1a;thinkpad x100e筆記本&#xff0c;2G內存&#x…

Android動態改變TextView字體顏色

Android動態改變TextView字體顏色 分類&#xff1a; Android 2012-06-04 21:56 141人閱讀 評論(0) 收藏 舉報androidcolorslayout必須在在res/color文件夾下面創建一個selector的xml [html] view plaincopyfont_style_colors.xml <selector xmlns:android"http://…

關于小程序的一些坑的總結

最近開發的小程序&#xff0c;有很多的坑。 1.底部的tabbar 不可更改尺寸和字體的大小。限制的還是蠻死的&#xff01;不知道是不是我沒找到方法去修改還是咋的。淡淡的憂桑&#xff5e;&#xff5e;&#xff5e; 2.可以動態的設置小程序的頂部導航欄的字&#xff0c;但是不可…

開源項目貢獻者_如何認識您的開源項目貢獻者并發展您的社區

開源項目貢獻者by David Herron大衛赫倫(David Herron) 如何認識您的開源項目貢獻者并發展您的社區 (How to recognize your open source project contributors and grow your community) There’s a truism — if a community is not growing, it is slowly dying. How is yo…

華農java實驗7_國家實驗教學示范中心

我校有生物學實驗教學中心、作物學實驗教學中心、水產養殖實驗教學中心、動物醫學實驗教學中心4個國家級實驗教學示范中心&#xff0c;10個省級實驗教學示范中心。生物學實驗教學中心華中農業大學生物學實驗教學中心成立于2001年7月&#xff0c;是直屬于生命科學技術學院的校級…

jsonpickle數據序列化

json&pickle數據序列化 json 用于字符串和python數據類型間進行轉換 pickle 用于python特有的類型 和 python的數據類型間進行轉換序列化&#xff1a;把字典或者字符串的內存對象 存到硬盤上&#xff1b; 反序列化&#xff1a;就是從硬盤上加載出來 json序列化與反序列化…

array_walk與array_map的區別

1.array_walk是用于用戶自定義的函數&#xff0c;所以想用array_walk($aIds, "trim");去掉數據元素中的空格是達不到目的的只能用array_walk($aIds, create_function(&$val, $val trim($val);)); 2.想完成上邊的需求其實更加合適用$aNewIds array_map("t…

shopify二次開發教程_詳細教程:如何將Shopify的Storefront API與React和Redux結合使用...

shopify二次開發教程by Chris Frewin克里斯弗里溫(Chris Frewin) 詳細教程&#xff1a;如何將Shopify的Storefront API與React和Redux結合使用 (A detailed tutorial: how to use Shopify’s Storefront API with React and Redux) 電子商務為所有人&#xff01; (…網站&…

element里面popover里面的高度_五斗柜的高度一般是多少 五斗柜放在什么位置好

五斗柜也就是一種抽屜收納柜&#xff0c;目前在臥室或是書房等空間均是可以見到。其根據使用用途的不同&#xff0c;進而有著高度和款式&#xff0c;以及擺放位置等等的區別。因此&#xff0c;下面帶來五斗柜的高度一般是多少、五斗柜放在什么位置好&#xff0c;以及五斗柜里面…

leetcode 57. 插入區間

給出一個無重疊的 &#xff0c;按照區間起始端點排序的區間列表。 在列表中插入一個新的區間&#xff0c;你需要確保列表中的區間仍然有序且不重疊&#xff08;如果有必要的話&#xff0c;可以合并區間&#xff09;。 示例 1&#xff1a; 輸入&#xff1a;intervals [[1,3]…

《C++標準程序庫》學習筆記1--第二章第三章

————————— 第二章 —————————1.&#xff08;P11&#xff09; C規定&#xff1a;除了以typename修飾外&#xff0c;template內的任何標志符號都被視為一個值(value)而非一個型別。 eg. template <classT>classMyClass{ typename T::SubType *ptr; };…