代碼隨想錄算法訓練營第五十四天|392.判斷子序列 115.不同的子序列

文檔講解:代碼隨想錄

視頻講解:代碼隨想錄B站賬號

狀態:看了視頻題解和文章解析后做出來了

392.判斷子序列?

class Solution:def isSubsequence(self, s: str, t: str) -> bool:dp = [[0] * (len(t)+1) for _ in range(len(s)+1)]for i in range(1, len(s) + 1):for j in range(1, len(t) + 1):if s[i-1] == t[j-1]:dp[i][j] = dp[i-1][j-1] + 1else:dp[i][j] = dp[i][j-1]return dp[len(s)][len(t)] == len(s)
  • ??? 時間復雜度:O(n^2)
  • ??? 空間復雜度:O(n)

1. 確定dp數組的含義

dp[i][j] 表示以下標i-1為結尾的字符串s,和以下標j-1為結尾的字符串t,相同子序列的長度為dp[i][j]

這里用i,j表示 i-1,j-1 是為了給初始化留一行和一列,而且遞推公式也更方便。

2. 確定遞推公式

第一種情況:s和j的元素相等,dp[i][j] 在 dp[i-1][j-1] 的基礎上 + 1

第二種情況:s和j元素不相等,相當于要刪除掉 j 的 i 位元素再去做對比,那就是 dp[i][j] = dp[i][j-1]

3. dp數組初始化

從遞推公式可以看出dp[i][j]都是依賴于dp[i - 1][j - 1] 和 dp[i][j - 1],所以dp[0][0]和dp[i][0]是一定要初始化的。

4. 確定遍歷順序

遞推公式中的j是i和j之前的元素下標,所以從前往后遞推。

5. 舉例

?115.不同的子序列?

class Solution:def numDistinct(self, s: str, t: str) -> int:dp = [[0] * (len(s) + 1) for _ in range(len(t) + 1)]for i in range(1, len(s) + 1):if t[0] == s[i-1]:dp[1][i] = dp[1][i-1] + 1else:dp[1][i] = dp[1][i-1]for i in range(2, len(t) + 1):for j in range(1, len(s) + 1):if t[i-1] == s[j-1]:dp[i][j] = dp[i][j-1] + dp[i-1][j-1]else:dp[i][j] = dp[i][j-1]return dp[-1][-1]
  • ??? 時間復雜度:O(n^2)
  • ??? 空間復雜度:O(n)

1. 確定dp數組的含義

dp[i][j]:以i-1為結尾的s子序列中出現以j-1為結尾的t的個數為dp[i][j]。

2. 確定遞推公式

  • s[i - 1] 與 t[j - 1]相等
  • s[i - 1] 與 t[j - 1] 不相等

當s[i - 1] 與 t[j - 1]相等時,dp[i][j]可以有兩部分組成。

一部分是用s[i - 1]來匹配,那么個數為dp[i - 1][j - 1]。即不需要考慮當前s子串和t子串的最后一位字母,所以只需要 dp[i-1][j-1]。

3. dp數組初始化

初始化t的第一個字符對應的子字符串數量。

4. 確定遍歷順序

遞推公式中的j是i和j之前的元素下標,所以從前往后遞推。

5. 舉例

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

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

相關文章

Java 關于批量插入遇到的問題 -sqlserver

序言: 我們在做項目的時候,經常會遇到,對數據的新增動作,如果數據量很少的情況下,單個新增對性能還好,但是一旦涉及到 大數據量,如十萬,百萬,千萬,這個時候如…

RabbitMq使用與整合

MQ基本概念 MQ概述 MQ全稱 Message Queue([kju?])(消息隊列),是在消息的傳輸過程中保存消息的容器。多用于分布式系統之間進行通信。 (隊列是一種容器,用于存放數據的都是容器,存…

優秀的時間追蹤軟件Timemator for Mac輕松管理時間!

在現代社會,時間管理成為了我們工作和生活中的一大挑戰。如果你經常感到時間不夠用,無法高效地完成任務,那么Timemator for Mac將成為你的得力助手。 Timemator for Mac是一款出色的時間追蹤軟件,它可以幫助你精確記錄和管理你的…

Linux的基本指令 ( 一 )

目錄 前言 Linux基本指令 快速認識五個指令 ls指令 補充內容 pwd指令 補充內容 cd指令 補充內容 重新認識指令 指令的本質 which指令 alias指令 最后 一個文件的三種時間 tree指令及安裝 tree指令 前言 關于Linux操作系統的桌面,在學校教學中我們…

實用高效 無人機光伏巡檢系統助力電站可持續發展

近年來,我國光伏發電行業規模日益壯大,全球領先地位愈發鞏固。為解決光伏電站運維中的難題,浙江某光伏電站與復亞智能達成戰略合作,共同推出全自動無人機光伏巡檢系統,旨在提高發電效率、降低運維成本,最大…

Spark---SparkCore(一)

一、術語與寬窄依賴 1、術語解釋 1、Master(standalone):資源管理的主節點(進程) 2、Cluster Manager:在集群上獲取資源的外部服務(例如:standalone,Mesos,Yarn) 3、Worker Node(standalone):資源管理的從節點(進程)或者說管理本機資源的…

用Python寫一個瀏覽器集群框架

更多Python學習內容:ipengtao.com 在分布式爬蟲和大規模數據采集的場景中,使用瀏覽器集群是一種有效的方式,可以提高數據采集的速度和效率。本文將介紹如何用Python編寫一個簡單但強大的瀏覽器集群框架,以應對需要使用多個瀏覽器實…

WebGL/threeJS面試題掃描與總結

什么是 WebGL?什么是 Three.js?請解釋three.js中的WebGL和Canvas的區別? WebGL(全寫Web Graphics Library)是一種3D繪圖協議,這種繪圖技術標準允許把JavaScript和OpenGL ES 2.0結合在一起,通過增加OpenGL ES 2.0的一個…

分庫分表、分布式數據庫、MPP

分庫分表、分布式數據庫、MPP的區別嗎? 一、MySQL分庫分表和MySQL分布式集群在性能方面各有優劣,具體取決于應用場景和需求。 MySQL分庫分表: 在分庫分表的場景下,可以將負載分散到多個數據庫實例上,從而提高整體性能…

【模糊測試】課堂筆記

模糊測試 模糊測試過程通常是自動化的。這個過程經典地分為以下幾個階段。 準備:這是第一階段,重點是 SUT 輸入和輸出格式的識別和規范。基于此,規范可以減少生成初始無效模糊數據的可能性并創建有效且精確的輸入。Fuzz Data Generation&am…

思科模擬器操作命令

模式 思科模擬器常見的模式有 用戶模式 能夠操作的命令比較少 特權模式特權模式下面可以操作的比較多 全局模式 接口模式 用戶模式進入特權模式: 命令enable 特權模式進行全局模式命令: configure terminal 退出命令 exit命令:返回上一層,即一步一步…

RocketMQ 消息中間件 知識點匯總

目錄 RocketMQ1、什么是RocketMQ?常用術語:2、為什么需要消息隊列3、什么是異步處理4、什么是服務解耦5、什么是流量控制6、消息隊列兩種模型隊列模型:發布/訂閱模型:總結:7、怎么保證消息不丟失8、如何處理消息被重復消費**出現消息重復的情況:****解決方法:**9、如何保…

流量分析-PhishingEmail_WriteUp

一、題目問題 問題1:黑客的email名稱 問題2:黑客向幾人發送了釣魚郵件 問題3:黑客傳輸的木馬文件名 問題4:下載并運行了木馬文件的人的email名稱和ip地址,用“-”連接 問題5:黑客用于反彈shell的主機i…

什么葡萄酒會適用這種雙重潷析方法呢?

潷析有兩個主要目的,一種是去除陳年或未經過濾的葡萄酒中的沉淀物。雖然沉淀物不會對你造成任何傷害,但當喝葡萄酒滿嘴都是葡萄沉淀物時是一件很糟糕的事。其次,傾析葡萄酒是可以讓葡萄酒“呼吸”與氧氣接觸的,氧氣可以軟化單寧&a…

二維數值型數組例題

1、單位矩陣初始化 題目描述 對用作單位矩陣的數組初始化。單位矩陣在主對角線上的值為1,而其他的地方的值為0,并且主對角線上的行、列下標是一樣的。 輸入要求 輸入一個整數n表示矩陣的行數 輸出要求 輸出n*n的單位矩陣。數據之間以空格間隔&…

LeetCode Hot100 102.二叉樹的層序遍歷

題目&#xff1a; 給你二叉樹的根節點 root &#xff0c;返回其節點值的 層序遍歷 。 &#xff08;即逐層地&#xff0c;從左到右訪問所有節點&#xff09;。 方法&#xff1a;迭代 class Solution {public List<List<Integer>> levelOrder(TreeNode root) {if …

C語言——輸入一個4位正整數,輸出其逆數。

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h> int main() {int i,j 0;int a1,a2,a3,a4;printf("輸入一個4位正整數&#xff1a;\n");scanf("%d",&i);a1 i/1000; a2 i/100%10; a3 i/10%10; a4 i%10; printf("千位a1%d,百位a…

【JavaFx】利用JavaFx寫一個登錄頁面

以下是一個基本的JavaFX登錄頁面示例: import javafx.application.Application; import javafx.geometry.Insets; import javafx.geometry.Pos; import javafx.scene.Scene; import javafx.scene.control.Button; import javafx.scene.control.Label; import javafx.scene.co…

mysql的alter怎么使用?

在MySQL中&#xff0c;ALTER語句用于修改數據庫的表結構。下面是一些ALTER語句的示例用法&#xff1a; 1. 添加列&#xff1a; ALTER TABLE 表名 ADD 列名 數據類型; 2. 修改列的數據類型&#xff1a; ALTER TABLE 表名 MODIFY 列名 新數據類型; 3. 修…

新人工作方法論:高效率的工作

引言&#xff1a; 轉眼間入職半載&#xff0c;在工作期間曾迷茫、困惑&#xff0c;深深的感受到職場身份的轉變帶來的痛苦。痛苦的原因不僅僅包括學生時代自己悶頭做事的思維習慣與團隊合作需求的差異性&#xff0c;也包括缺乏體系的工作方法。 自己在網絡上查了一些方法論&a…