HOT86-單詞拆分

? ? ? ? leetcode原題鏈接:單詞拆分

題目描述

? ? ? ?給你一個字符串?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

提示:

  • 1 <= s.length <= 300
  • 1 <= wordDict.length <= 1000
  • 1 <= wordDict[i].length <= 20
  • s?和?wordDict[i]?僅有小寫英文字母組成
  • wordDict?中的所有字符串?互不相同

解題方法:動態規劃。

1. 問題定義:dp[k]表示s[0,1,...,k-1],即以第k個字符結尾是否滿足要求

2. 初始化:dp[0]=true,什么都不選,空也是一個集合的子集

3.狀態轉移方程: dp[i] = dp[j] && str[j, i-n]==true

4. 結果返回: dp[n]

C++代碼

#include <iostream>
#include <string>
#include <vector>
#include <set>
/*
* dp[i]表示以s[0,1,...,i-1]是否滿足要求
*     dp[i]= dp[i] || (dp[i-1] && s[i,...,n-1]在wordDict中
*/class Solution {
public:bool wordBreak(std::string s, std::vector<std::string>& wordDict) {int n = s.size();// 1. 問題定義:dp[k]表示s[0,1,...,k-1],即以第k個字符結尾是否滿足要求std::vector<bool> dp(n+1, false); //dp[k]表示s[0,1,...,k-1],即以第k個字符結尾是否滿足要求// 2. 初始化:dp[0]=true,什么都不選,空也是一個集合的子集dp[0] = true; //什么都不選,空也是一個集合的子集// 利用set保存詞典,不用vector初始化std::set<std::string> word_set(wordDict.begin(), wordDict.end());// 3.狀態轉移方程: dp[i] = dp[j] && str[j, i-n]==truefor (int i = 1; i <= n; i++) { //從第1個字符,遍歷到第n個字符// 用s[j]分割第i個字符結尾的字符串for (int j = 0; j < i; j++) { //std::string right_str = s.substr(j, i - j);if (dp[j] && word_set.count(right_str) > 0) { //只要找到一個分割點符合條件,說明字符串滿足要求dp[i] = true;break;}}}// 4. 結果返回: dp[n]return dp[n];//返回以第n個字符結尾的字符串是否滿足要求}
};

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

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

相關文章

不同路徑 II——力扣63

class Solution {public:int uniquePathsWithObstacles(vector<vector<int>>& obstacleGrid) {int n=

一鍵登錄是如何在登錄方式中脫穎而出的?

首先&#xff0c;我們先了解一下登錄方式的演變過程&#xff0c;大致可以分為三個階段。分別是賬號密碼登錄、短信驗證碼登錄和一鍵登錄。 階段一&#xff1a;賬號密碼登錄 賬號密碼登錄是一種常見的用戶身份驗證方式&#xff0c;用戶需要輸入一個唯一的賬號和對應的密碼來登…

【APITable】教程:創建并運行一個自建小程序

1.進入APITable&#xff0c;在想要創建小程序的看板頁面點擊右上角的【小程序】&#xff0c;進入小程序編輯頁面。 2.創建一個新的小程序區。 點擊【 添加小程序】 點擊創建小程序&#xff0c;選擇模板&#xff0c;輸入名字。 3.確定后進入小程序部署引導頁面。 4.打開Xshell 7…

初識鴻蒙跨平臺開發框架ArkUI-X

HarmonyOS是一款面向萬物互聯時代的、全新的分布式操作系統。在傳統的單設備系統能力基礎上&#xff0c;HarmonyOS提出了基于同一套系統能力、適配多種終端形態的分布式理念&#xff0c;能夠支持手機、平板、智能穿戴、智慧屏、車機等多種終端設備&#xff0c;提供全場景&#…

99. for循環練習題-3種方式輸出0-9

【目錄】 文章目錄 99. for循環練習題-3種方式輸出0-91. for循環和while循環的區別2. 輸出 0~(n-1)的數字2.1 基礎代碼2.2 自定義函數代碼2.3 異常處理語句代碼 【正文】 99. for循環練習題-3種方式輸出0-9 1. for循環和while循環的區別 for循環和while循環都用于重復執行特定…

Linux一些常見的命令

1. 基礎命令 1. ls&#xff1a; 列出目錄內容。- 例如&#xff1a;ls -l 以長格式列出文件和目錄。2. cd&#xff1a; 切換工作目錄。- 例如&#xff1a;cd /home/user 進入 /home/user 目錄。3. pwd&#xff1a; 顯示當前工作目錄的路徑。4. mkdir&#xff1a; 創建新目錄。-…

flink-對齊和不對齊,精準一次和至少一次

精準一次怎么保證&#xff1f;可以設置為以下2個 對齊 當有一個barrier比較快時&#xff0c;輸入緩沖區阻塞&#xff0c;當另外一個barrier到來時&#xff0c;才進行備份&#xff0c;所以數據不會重復。優點&#xff1a;不會造成數據重復缺點&#xff1a;會造成數據積壓&#x…

ChatGPT Plus和ChatGPT對比

模型規模更大&#xff0c;參數數量超過6萬億&#xff0c;比ChatGPT大很多訓練數據更豐富&#xff0c;包括不同語言、領域和類型的數據語言理解和生成能力更強&#xff0c;能夠更準確地理解和生成文本可解釋性和可控性更好&#xff0c;支持更多的調參和控制參數&#xff0c;生成…

uni-app和springboot完成前端后端對稱加密解密流程

概述 使用對稱加密的方式實現。前端基于crypto-js。uni-app框架中是在uni.request的基礎上&#xff0c;在攔截器中處理的。springboot在Filter中完成解密工作。 uni-app 項目中引入crypto-js。 npm install crypto-js加密方法 const SECRET_KEY CryptoJS.enc.Utf8.parse(…

最強自動化測試框架Playwright(20)- iframe

一個頁面可以附加一個或多個 Frame 對象。每個頁面都有一個主框架&#xff0c;并且假定頁面級交互&#xff08;如&#xff09;在主框架中運行。click frame_locator 使用 iframe 時&#xff0c;可以創建一個框架定位器&#xff0c;該定位器將進入 iframe 并允許選擇該 iframe…

idea模板的使用(配置xml文件模板)

1. 問題的引出 我們在日常項目中可以發現&#xff0c;sql映射文件和mybatis主配置文件&#xff0c;以及application.yml文件中有很多固定不變的內容&#xff0c;為了方面使用&#xff0c;所以可以把這些xml文件設置為模板 2. 創建模板的步驟 按照圖片一步一步進行即可 點擊…

gcc編譯選項之預處理向源碼傳參和條件編譯

一、是什么? 預處理:是指在進行加工前準備工作. gcc 選項 文件名字 二、使用步驟 1.向源碼傳參 gcc -save-temps -DSENSOR_TYPE=SONY_IMX477_MIPI_8M_30FPS_12BIT hello.c -o hello 代碼如下(示例): #include <stdio.h> #include <stdlib.h>typedef enum …

acwing 平衡括號字符串 貪心 括號序列

&#x1f468;?&#x1f3eb; 平衡括號字符串 給定一個字符串 s s s&#xff0c;該字符串的每個字符都是 (、) 或 # 之一。 你的任務是將 s s s 中的每個 # 變換為一個或多個 )&#xff0c;從而得到一個平衡括號字符串。 不同 # 變換的 ) 的數量可以不同。 請你輸出為了…

數據容器——元組(tuple)

1、元組與列表的不同點 列表是可以修改的。如果想要傳遞的信息&#xff0c;不被算改&#xff0c;列表就不合適了。 元組同列表一樣&#xff0c;都是可以封裝多個、不同類型的元素在內。 但最大的不同點在于&#xff1a;元組一旦定義完成&#xff0c;就不可修改 所以&#xff…

2023河南萌新聯賽第(五)場:鄭州輕工業大學 --01分數規劃

題目描述 給定一個字符串 s&#xff0c;僅含 0, 1, ? 三種字符&#xff0c;你必須將所有 ? 替換為 1 或 0 。 定義 s 的美好值為將所有?進行替換后&#xff0c;s的最長連續 1 或 0 的子串的長度。請你進行所有替換后&#xff0c;使得字符串 s 的美好值最大&#xff0c;請輸…

(二)結構型模式:1、適配器模式(Adapter Pattern)(C++實現示例)

目錄 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 2、適配器模式應用場景 3、適配器模式的UML圖學習 4、C實現適配器模式的示例 1、適配器模式&#xff08;Adapter Pattern&#xff09;含義 將一個接口轉換為客戶端所期待的接口&#xff0c;從而使兩個接口…

CompletableFuture

java8中新引入了批量線程處理類CompletableFuture CompletableFuture.allOf是與的關系, 每個都要執行完 CompletableFuture.anyOf是或的關系, 其中一個執行完 以下示例代碼: CompletableFuture.allOf(CompletableFuture.runAsync(() -> {Thread.currentThread().setName(&q…

js常用的方法函數

JavaScript 中有許多常用的內置方法和函數&#xff0c;用于處理字符串、數組、對象、日期等不同類型的數據。以下是一些常見的 JavaScript 方法和函數&#xff1a; 字符串操作&#xff1a; str.length: 返回字符串的長度。 str.charAt(index): 返回指定位置的字符。 str.indexO…

Mac安裝nvm教程及使用

nvm 是 node 版本管理器&#xff0c;也就是說一個 nvm 可以管理多個 node 版本&#xff08;包含 npm 與 npx&#xff09;&#xff0c;可以方便快捷的安裝、切換 不同版本的 node。 1、直接通過brew安裝 執行命令&#xff1a;brew install nvm PS&#xff1a; 如果沒有安裝br…

Golang - 生成和讀取toml文件

代碼示例&#xff1a; package mainimport ("fmt""github.com/pelletier/go-toml""os""path" )func CreateToml(tomlPath string) {tree, err : toml.Load("")if err ! nil {fmt.Println("Error while creating empt…