力扣115:不同的子序列

力扣115:不同的子序列

  • 題目
  • 思路
  • 代碼

題目

給你兩個字符串 s 和 t ,統計并返回在 s 的 子序列 中 t 出現的個數。

測試用例保證結果在 32 位有符號整數范圍內。

思路

首先我們來考慮特殊情況,當s串的長度小于t串時s串肯定就沒有t串了。其他情況我們就需要想一想怎么做了,如果按照暴力做法我們就遍歷s串先找到t串的第一個字符然后再找第二個第三個,也就是一個一個字符的匹配,問題是題目設置的是s串的子序列而不是子串,子序列是不需要連續的所以這就導致找到了第一個字符后可能會有很多個第二個字符也就導致我們的時間復雜度會很高。那么我們是否可以換一種思想,既然是要一個一個的匹配也就是我們可以把兩個字符串拆分成一個一個的字符,我們定義一個二維數組dp,設s串的下標為i,t串的下標為j。我們設dp[i][j]是s[i,…]也就是i位置到末尾的s子串種t[j,…]即j到末尾的t子串的數量,簡單來說我們就是把這個問題分成了一個一個的子問題,我們利用這個二維數組來移動i和j從而得到不同的s子串中不同的t子串出現的個數。然后再找尋其中的規律推導出狀態轉移方程出來,所以我們是利用了動態規劃的思想,把大問題分成小問題。
那么這個二維數組dp我們要如何定義呢?我們需要定義成一個(n+1)*(m+1)的,n為s串的長度m為t串的長度。為什么要+1呢因為我們需要我們從這兩個子串是空串的情況開始,當s為空串t不為空串時dp[i][j] = 0因為一個空串里怎么可能有非空串,當s為非空串t為空串時dp[i][j] =1因為一個空串是任意一個非空串的子序列。所以dp[i][0] = 1( 0 <= i <= n)。在對特殊情況進行討論后我們現在就要移動i和j來得到每一個子問題的答案了,這里需要分成兩種情況。

  1. s[i-1] == t[j-1]
    當此位置的字符相同時,我們需要考慮一個問題那就是這個字符是需要匹配的嗎,這是什么意思呢。我們還需要回顧一下題目說的是s串的子序列中t出現的個數,是子序列所以不是連續的所以在這兩個相等的字符前面可能還有和t[j]相同的s[i],所以我們需要討論這兩種情況例如s:tbabag,t:bag。s的第一個a不是一定要和t的a進行匹配的也可以讓后面那個a來和t的a進行匹配,這就是為什么要考慮是否需要匹配。如果兩個字符匹配了那么此時的dp[i][j] = dp[i-1][j-1],也就是我們需要考慮t[j-1,…]作為s[i-1,…]的子序列的情況了,如果不匹配此時的dp[i][j] = dp[i-1][j],因為不匹配也就是這個i被跳過了我們就需要考慮t[j]作為s[i-1]的子序列的情況了。
  2. s[i]-1 != t[j-1]
    如果兩個字符不同就說明無法匹配,dp[i][j] = dp[i+1][j]。

代碼

class Solution {
public:int numDistinct(string s, string t) {int n = s.length();int m = t.length();if (n < m) {return 0;}//dp[i][j]代表t中從0到j的子串作為s中從0到i的子串的子序列的個數vector<vector<unsigned long long>> dp(n + 1, vector<unsigned long long>(m + 1));for (int i = 0; i <= n; i++) {dp[i][0] = 1;}for (int i = 1; i <= n; i++) {char si = s[i-1];for (int j = 1; j <= m; j++) {char tj = t[j-1];if (si == tj) {dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1];} else {dp[i][j] = dp[i - 1][j];}}}return dp[n][m];}
};

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

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

相關文章

2004-2023年各省生活垃圾無害化處理率數據(無缺失)

2004-2023年各省生活垃圾無害化處理率數據&#xff08;無缺失&#xff09; 1、時間&#xff1a;2004-2023年 2、來源&#xff1a;國家統計局、統計年鑒 3、指標&#xff1a;生活垃圾無害化處理率 4、范圍&#xff1a;30省 5、指標解釋&#xff1a;生活垃圾無害化處理率指報…

【Python練習題】Python小白必練100題答案-第21-40題

練習題直達鏈接Python小白必練100題答案-第1-20題點我直達Python小白必練100題答案-第21-40題點我直達Python小白必練100題答案-第41-60題點我直達Python小白必練100題答案-第61-80題點我直達Python小白必練100題答案-第81-97題點我直達目錄專欄導讀循環結構 字符串操作第三部…

添加?件--場景?

添加?件–場景? 學習到這?&#xff0c;我們已經清楚了如何向倉庫中添加?件&#xff0c;并且對于?作區、暫存區、版本庫也有了?定的認識。那么我們再展??種添加?件的場景&#xff0c;能加深對?作區、暫存區、版本庫的理解&#xff0c;?例如下&#xff1a; roothcss-e…

華為網路設備學習-31(BGP協議 六)

BGP路由屬性的幾種常見使用方法&#xff1a; 29章是 BGP路由匯總 與 as-path-filter&#xff08;正則表達式&#xff09; 30章是 Community 的使用方法 本章是 ip前綴列表ip-prefix 、 路由過濾 filter-policy 和路由策略 route-policy 一、在BGP中的 ip前綴列表&#xf…

Windows PostgreSQL JDBC驅動安裝包位置

要在Windows系統上獲取PostgreSQL JDBC驅動安裝包&#xff08;后綴為.jar的文件&#xff09;&#xff0c;可通過以下官方及常用渠道獲取&#xff0c;具體位置如下&#xff1a; ###&#x1f527; 1. 官方網站下載&#xff08;推薦&#xff09; 下載地址&#xff1a;https://jdb…

機器學習從入門到精通 - 聚類算法大比拼:K-Means、DBSCAN實戰與評估陷阱

機器學習從入門到精通 - 聚類算法大比拼&#xff1a;K-Means、DBSCAN實戰與評估陷阱 開場白&#xff1a;推開無監督學習的大門 朋友們&#xff0c;不知道你們有沒有對著堆積如山、沒有標簽的數據發過愁&#xff1f;想從里面找出點規律&#xff0c;分組什么的&#xff0c;結果發…

AI 重構內容創作:從文案生成到視頻剪輯,創作者該如何與 AI 協同共生?

一、引言&#xff1a;AI 掀起內容創作的 “重構浪潮”?行業現象引入&#xff1a;列舉 AI 在內容創作領域的爆發式應用案例&#xff08;如某平臺 AI 文案工具日生成量破百萬、AI 視頻剪輯軟件用戶增長超 300%&#xff09;?創作者需求變化&#xff1a;通過調研數據說明創作者對…

后端一次性返回十萬條數據時,前端需要采用多種性能優化策略來避免頁面卡頓

當后端一次性返回十萬條數據時&#xff0c;前端需要采用多種性能優化策略來避免頁面卡頓。以下是主要的優化方案&#xff1a; 分頁加載 - 將數據分批次加載顯示虛擬滾動 - 只渲染可視區域內的數據數據懶加載 - 按需加載數據Web Workers - 在后臺線程處理數據時間切片 - 分散渲染…

基于-輕量級文檔搜索系統的測試報告

文章目錄一、項目背景二、項目功能三、測試計劃&#xff08;一&#xff09;測試用例設計&#xff08;二&#xff09;測試用例實現1.功能測試2.界面測試3.兼容性測試4.易用性測試5.安全性測試一、項目背景 1.基于輕量級文檔檢索系統采用C技術棧來實現&#xff0c;同時使用了本地…

編輯器vim(Linux)

Linux下開發工具是獨立的寫代碼——編輯器 vim編譯代碼——gcc/g調試——gdb、cgdb構建工具——makefile、make、cmakevim只用來寫代碼注意&#xff1a;直接用vim打開一個不存在的文件并保存退出&#xff0c;就會自動生成該文件vim有多種模式命令模式&#xff08;Normal Mode&a…

GitLab,2025最新如何配置中的SSH key步驟

電腦右鍵先檢查&#xff0c;是否有公鑰 git cat ~/.ssh/id_rsa.pub下面是有&#xff0c;不用生成公鑰&#xff0c;沒有就要生成生成本地電腦公鑰, 建議用第二種 //第一種ssh-keygen -t rsa//第二種------- 1.打開git bash,輸入&#xff1a;ssh-keygen -t rsa -C “你的郵箱”ss…

華為HCIE證書多久續一次費?費用多少?

根據華為官方政策&#xff0c;華為認證HCIE的有效期為3年&#xff0c;有效期自證書正式發放之日起計算&#xff0c;考生可通過華為人才在線官網登錄個人賬號&#xff0c;在“我的證書”欄目中查詢具體有效期起止時間。一、HCIE證書到期后的續證方式 1.重考對應HCIE的認證考試&a…

提升文本到圖像強化學習穩定性:Pref - GRPO算法如何革新圖像生成?

提升文本到圖像強化學習穩定性&#xff1a;Pref - GRPO算法如何革新圖像生成&#xff1f; 在文本到圖像生成領域&#xff0c;強化學習正重塑著模型與人類偏好的對齊方式。本文聚焦于一種創新的基于成對偏好獎勵的GRPO方法&#xff08;Pref - GRPO&#xff09;&#xff0c;它通…

Linux UDisks守護進程曝本地提權漏洞CVE-2025-8067,PoC已發布

漏洞概述安全研究人員在Linux環境中廣泛使用的磁盤管理組件UDisks守護進程中&#xff0c;發現了一個嚴重漏洞&#xff08;編號CVE-2025-8067&#xff0c;CVSS評分8.5&#xff09;。該漏洞已報告給紅帽產品安全團隊&#xff0c;并在UDisks更新版本中得到修復。技術細節該漏洞存在…

uniapp 開發上架 iOS App全流程

操作文檔網址&#xff1a;https://ask.dcloud.net.cn/article/152 操作學習視頻地址&#xff1a;uniapp打包上線微信小程序、安卓、IOS流程_嗶哩嗶哩_bilibili 第一步&#xff1a;注冊蘋果 iOS 個人開發者賬號 費用說明 ?個人開發者賬號?&#xff1a;適用于獨立開發者或小…

Sqlsugar補充自定義模板

DBFirst默認創建所有實體CreateClassFile()的第二個參數為生成實體類命名空間//.net6以下 db.DbFirst.IsCreateAttribute().CreateClassFile("c:\\Demo\\1", "Models"); //.net6以上 string加? db.DbFirst.IsCreateAttribute().StringNullable().CreateCl…

LeetCode 392.判斷子序列

給定字符串 s 和 t &#xff0c;判斷 s 是否為 t 的子序列。 字符串的一個子序列是原始字符串刪除一些&#xff08;也可以不刪除&#xff09;字符而不改變剩余字符相對位置形成的新字符串。&#xff08;例如&#xff0c;"ace"是"abcde"的一個子序列&#x…

邏輯回歸:從原理到實戰的完整指南

在機器學習中&#xff0c;分類任務是最常見的應用場景之一。而邏輯回歸&#xff08;Logistic Regression&#xff09;&#xff0c;盡管名字中有“回歸”&#xff0c;實際上是一種非常強大且廣泛應用的二分類模型。它簡單、高效、可解釋性強&#xff0c;是數據科學初學者入門分類…

鴻蒙搭配前端開發:應用端與WEB端交互

鴻蒙系統&#xff08;HarmonyOS&#xff09;是華為開發的一款面向全場景的分布式操作系統&#xff0c;其設計初衷是為了適應物聯網時代的需求&#xff0c;旨在構建一個統一的操作系統&#xff0c;支持多種設備的無縫協同工作。其分布式開發的一些主要優勢&#xff1a; 跨設備協…

配置sscms時被sql server處處刁難

今天要記下來的是一個小例子。接前面&#xff0c;當我終于完成sql server的安裝時&#xff0c;才發現要填寫sscms的兩個空是有多么艱難。首先安裝sql server2016出現了太多環境不兼容的問題&#xff0c;讓我只好退而安裝sql server2012。安裝sql server2012時其實是可以避坑的&…