動態規劃之單詞拆分

????????這次分享一道關于動態規劃的leetcode,單詞拆分。

單詞拆分

給你一個字符串 s 和一個字符串列表 wordDict 作為字典。如果可以利用字典中出現的一個或多個單詞拼接出 s 則返回 true。注意:不要求字典中出現的單詞全部都使用,并且字典中的單詞可以重復使用。

示例:
輸入: s = “leetcode”, wordDict = [“leet”, “code”]
輸出: true
解釋: 返回 true 因為 “leetcode” 可以由 “leet” 和 “code” 拼接成。

class Solution {public boolean wordBreak(String s, List<String> wordDict) {boolean[] dp = new boolean[s.length() + 1];dp[0] = true;for(int i = 0;i <= s.length();i++){for(int j = 0;j <= i;j++){if(dp[j] && wordDict.contains(s.substring(j, i))){dp[i] = true;}}}return dp[s.length()];}
}

????????先看遞推公式,舉個例子,字符串為"appendapple",字符串列表為[“app”,“end”,“apple”],如果已經知道字符串append可以由字符串列表中單詞構成,那么只要判斷apple是否包含在字符串列表中即可,因此可以有遞推公式,dp[j] && wordDict.contains(s.substring(j, i))。解釋一下,dp[j]表示下標0到下標j - 1這段字符串可以由字符串列表單詞構成(可能有多個),剩下的只需要判斷下標j到i的字符串是否出現在字符串列表中(下標j到i為一個字符串,即一個單詞)。因此dp[i]的含義為以下標i - 1結尾的字符串可以(不可以)由給定的字符串列表中的單詞構成,注意是i - 1,dp[i]為true,可以,dp[i]為false,則不可以。為什么是i - 1,這是由于substring方法截取字符串時區間是左閉右開的。最后是創建dp,長度為字符串長度加1,數組初始化,僅需將dp[0]初始化為true即可,為什么等會說明。
????????以上述示例說明代碼的執行流程,首先初始化dp[0] = true,接著進入for循環,當i = 0,j = 0時,substring(0, 0),為空。當i = 1,j = 0時,substring(0, 1),為l,不再字符串列表中,j++,substring(1, 1)為空。當i = 2,j = 0,substring(0, 2)為le,j++,substring(1, 2)為e,j++,substring(2,2)為空,均不在字符串列表中。當i = 3,j等于0,substring(0, 3)為lee,j++,substring(1, 3)為ee,substring(2,3)為e,substring(3,3)為空,均不在字符串列表中。當i = 4,j等于0,substring(0, 4)為leet,出現在字符串列表中,wordDict.contains(s.substring(j, i)結果為true,dp[j]即為dp[0],這時就涉及到dp[0]的初始化,如果初始化為false,導致dp[4]無法初始化,因此dp[0]初始化為true,因此dp[4] = true,可以判斷了leet出現在字符串列表中,雖然是dp[4],但是僅判斷了下標0到3,并沒有包括下標4。j++,substring(1, 4)為eet,substring(2, 4)為et,substring(3, 4)為t,substring(4,4)為空,均不在字符串列表中。接著當i = 5,截取的字符串為leetc,eetc,etc,tc,c和空。接著當i = 6是,截取的字符串為leetco,eetco,etco,tco,co,o和空,接著i = 7,截取的字符串為leetcod,eetcod,etcod,tcod,cod,od,d和空,均不存在于字符串列表中。當i = 8,j = 0,截取字符串為leetcode,eetcode,etcode,tcode,,均不存在于字符串列表中。當i = 8,j = 4,substring(4, 8)截取的字符串為code,出現在字符串列表中,并且dp[4]為true,因此dp[8]為true,之后截取的字符串為ode,de,e和空,,均不存在于字符串列表中。內外層循環遍歷結束,返回dp[字符串長度 + 1],leetcode長度為7,返回dp[8]為true,表示的含義是下標0-7的字符串可以由字符串列表中的單詞構成。

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

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

相關文章

【技術】漢諾塔的遞歸問題解析及多語言實現

漢諾塔的遞歸問題解析及多語言實現 漢諾塔&#xff08;Hanoi Tower&#xff09;問題是一個非常經典的遞歸問題。它起源于一個古老的傳說&#xff1a;有三個柱子和64個大小不一的金盤&#xff0c;開始時這些金盤按從小到大的順序放在柱子A上&#xff0c;目標是在柱子B上按同樣的…

Java——Java開發環境

一、JDK 1、什么是JDK JDK&#xff08;Java Development Kit&#xff0c;Java 開發工具包&#xff09;是用于開發 Java 應用程序的核心工具包。它包含了編寫、編譯、調試和運行 Java 程序所需的一切工具和庫。JDK 是每個 Java 開發者必備的工具。 2、JDK 主要組件 JDK主要包…

HNU-計算機體系結構-實驗3-緩存一致性

計算機體系結構 實驗3 計科210X 甘晴void 202108010XXX 文章目錄 計算機體系結構 實驗31 實驗目的2 實驗過程2.0 預備知識2.0.1 多cache一致性算法——監聽法2.0.1.1 MSI協議2.0.1.2 MESI協議2.0.1.3 本題講解 2.0.2 多cache一致性算法——目錄法2.0.2.1 有中心的目錄法2.0.2…

A2B V2.0協議學習筆記(非正式版本)

一、說明 A2B全稱是 Automotive Audio Bus 汽車音頻總線,主要是解決傳統音頻總線線多、線重、成本貴等問題。 A2B V2.0總線相對V1.0主要變化點: 速率提升,高達98.304Mbps,全雙工模式 編碼方式,由之前的曼徹斯特編碼變為QPSK(正交相移鍵控)編碼,每個符合2bit數據,因此…

隨手記:多行文本域存數據有換行,回顯數據換行展示

1.在新增的時候存儲數據 <el-input type"textarea"v-model"XXXX"></el-input> 2.詳情頁返回的數據&#xff1a; replace一頓操作確實復雜 最快的方法直接寫個樣式:style"white-space: pre-line" 即可行內或者class樣式都可以 …

B2126 連續出現的字符

連續出現的字符 題目描述 給定一個字符串&#xff0c;在字符串中尋找第一個連續出現次數不低于 k k k 次的字符。 輸入格式 2 2 2 行。第 1 1 1 行是 k k k&#xff1b;第 2 2 2 行是僅包含大小寫字母的字符串。 輸出格式 字符串中第一個連續出現次數不低于 k 次的字符…

Python面試寶典:Python中與動態規劃和排序算法相關的面試筆試題(1000加面試筆試題助你輕松捕獲大廠Offer)

Python面試寶典:1000加python面試題助你輕松捕獲大廠Offer【第二部分:Python高級特性:第十二章:高級數據結構和算法:第二節:Python中實現各類高級數據結構與算法三】 第十二章:高級數據結構和算法第二節:Python中實現各類高級數據結構與算法2.3、python中與動態規劃和排…

網頁如何給js后臺傳遞數字類型參數

網頁無法通過get方法傳遞數字參數給js后臺&#xff0c;就是網頁端寫的是數字參數&#xff0c;傳遞給后臺也變成了數字字符串。而js對數字類型和字符串類型是不相同的。由于我們的代碼是通過中間件掛載接口的&#xff0c;通過joi庫檢查參數。 const Joi require(joi); //注意&…

秋招突擊——算法打卡——5/28——復習{Z字形變換、兩數之和}——新做:{整數反轉、字符串轉整數}

文章目錄 復習Z字形變換實現代碼參考代碼 兩數之和復習代碼 新作整數反轉個人實現實現代碼 參考做法字符串轉換整數個人解法 分析總結 復習 Z字形變換 實現代碼 這里使用了他的思想&#xff0c;但是沒有用他的代碼&#xff0c;雖然已經比上次簡潔了&#xff0c;但是還是不夠&…

【日記】終于鼓起勇氣買了吹風機!(356 字)

正文 好忙。今天比昨天還要忙&#xff0c;水都沒喝幾口。嗯&#xff0c;好像只喝了兩口。 今天補了一份印鑒卡&#xff0c;銷了一個戶&#xff0c;變了一個戶&#xff0c;弄了一大堆資料找人簽字&#xff0c;還順帶要解決一個押品的歷史遺留問題。 中午睡得好香&#xff0c;都不…

如何理解和使用 this 關鍵字

this 關鍵字是許多編程語言中的一個核心概念&#xff0c;在面向對象編程&#xff08;OOP&#xff09;中尤為重要。在JavaScript、Java、C、C#等語言中&#xff0c;this 扮演著至關重要的角色。理解 this 的意義和用法&#xff0c;對于編寫清晰、有效的代碼至關重要。 什么是th…

超分論文走讀

codeFormer 原始動機 高度不確定性&#xff0c;模糊到高清&#xff0c;存在一對多的映射紋理細節丟失人臉身份信息丟失 模型實現 訓練VQGAN 從而得到HQ碼本空間作為本文的離散人臉先驗。為了降低LQ-HQ映射之間的不確定性&#xff0c;我們設計盡量小的碼本空間和盡量短的Code…

ECS搭建2.8版本的redis

要在ECS&#xff08;Elastic Compute Service&#xff09;上手動搭建Redis 2.8版本&#xff0c;你可以按照以下步驟操作&#xff1a; 步驟1&#xff1a;更新系統和安裝依賴 首先&#xff0c;登錄到你的ECS實例&#xff0c;確保系統是最新的并安裝必要的依賴包&#xff1a; s…

運營推廣最容易被忽略的細節!用短鏈接推廣必須要掌握這些要點!

短鏈接是目前很多企業進行網絡推廣最常用的方式之一&#xff0c;是引流轉化的重要橋梁&#xff0c;很多工作者可能覺得用短鏈接推廣&#xff0c;只需要簡簡單單的把生成好的短鏈接放上去就行&#xff0c;但是實際上有很多細節要點是需要著重注意的&#xff0c;今天小編就圍繞這…

做外貿怎么給新老客戶定價

通常情況下我們對于新客戶的關注點要比老客戶更多一些&#xff0c;大概是因為新客戶的開發周期比較長而且不確定性也很大。 但是對于一些返單的老客戶對比來講&#xff0c;老客戶的穩定性就會相對來說增加很多&#xff0c;如果款式規格都是固定的&#xff0c;那么老客戶從選品…

[AIGC] Nginx常用變量詳解

Nginx非常強大&#xff0c;其主要功能包括HTTP服務器、反向代理、負載均衡等。Nginx的配置中有許多內置的變量&#xff0c;你可以在配置文件中使用這些變量進行靈活的配置。在本篇文章中&#xff0c;我們將介紹一些Nginx中常見的變量&#xff0c;包括proxy_add_header。 常見變…

redis顯示RDB error

報錯問題&#xff1a;"RDB error" 是指在Redis的RDB持久化過程中出現了錯誤。Redis的RDB持久化是通過將內存中的數據集快照保存到磁盤中的一種方式。如果在這個過程中遇到問題&#xff0c;Redis會記錄一條包含"RDB error"的日志信息。上圖錯誤&#xff0c;…

【論文復現】——基于隨機抽樣與特征值法的點云平面穩健擬合方法

目錄 一、算法原理1、論文概述2、參考文獻二、代碼實現三、結果展示本文由CSDN點云俠原創,原文鏈接。如果你不是在點云俠的博客中看到該文章,那么此處便是不要臉的GPT爬蟲。 一、算法原理 1、論文概述 針對點云數據含有異常值且傳統擬合方法擬合結果不理想的情況,本文提出…

Go 超時退出

1、使用 time.After() 創建超時退出&chan&select 通過 time.After() 函數創建一個超時通道&#xff0c;當超時發生時&#xff0c;通道會發送一個信號。結合 select 語句&#xff0c;可以在超時時退出程序。 package mainimport ("fmt""time" )…

Java基礎語法詳解

Java是一種廣泛使用的面向對象編程語言&#xff0c;適用于開發跨平臺的應用程序。本文將詳細介紹Java的基礎語法&#xff0c;幫助初學者打好扎實的編程基礎。 1. Java程序的結構 一個基本的Java程序通常由類和方法組成。以下是一個簡單的Java程序示例&#xff1a; public cl…