LeetCode392_判斷子序列

LeetCode392_判斷子序列

  • 標簽:#雙指針 #字符串 #動態規劃
    • Ⅰ. 題目
    • Ⅱ. 示例
  • 0. 個人方法
  • 官方題解一:雙指針
  • 官方題解二:動態規劃

標簽:#雙指針 #字符串 #動態規劃

Ⅰ. 題目

給定字符串 s 和 t ,判斷 s 是否為 t 的子序列。

字符串的一個子序列是原始字符串刪除一些(也可以不刪除)字符而不改變剩余字符相對位置形成的新字符串。(例如,"ace"是"abcde"的一個子序列,而"aec"不是)。

  • 進階:
    如果有大量輸入的 S,稱作 S1, S2, … , Sk 其中 k >= 10億,你需要依次檢查它們是否為 T 的子序列。在這種情況下,你會怎樣改變代碼?

Ⅱ. 示例

· 示例 1:
輸入:s = “abc”, t = “ahbgdc”
輸出:true

· 示例 2:
輸入:s = “axc”, t = “ahbgdc”
輸出:false

0. 個人方法

遍歷字符串 t,逐個和 s 字符串對比,如果相同就讓cnt++(我的代碼里寫的是 position),不同就繼續遍歷字符串 t,如果 cnt == s.length(),那么就說明字符串 t 中有字符串 s 這個子序列

class Solution {
public:bool isSubsequence(string s, string t) {if (t.length() < s.length())return false;if (t.length() == 0 && s.length() == 0)return true;int position = 0;for (int i=0; i<t.length(); ++i){if (t[i] == s[position]){position++;}if (position == s.length()){return true;}}return false;}
};

官方題解一:雙指針

大致思路與個人方法相同

class Solution {
public:bool isSubsequence(string s, string t) {int n = s.length(), m = t.length();int i = 0, j = 0;while (i < n && j < m) {if (s[i] == t[j]) {i++;}j++;}return i == n;}
};

官方題解二:動態規劃

(如果需要多次查詢 s 是否是 t 的子序列,DP方法更高效)

考慮到前面雙指針的做法,我們注意到我們有大量的時間用于在 t 中找到下一個匹配字符。
因此,我們可以考慮對 t 進行預處理,記錄從當前位置起,往后每一個字符第一次出現的位置。

class Solution {
public:bool isSubsequence(string s, string t) {int n = s.size(), m = t.size();// DP 表:f[i][j] 表示 t 從位置 i 開始,字符 j 第一次出現的位置vector<vector<int>> f(m + 1, vector<int>(26, 0));// 初始化邊界:如果 t 的末尾之后的位置,所有字符都不可達(設為 m)for (int j = 0; j < 26; j++) {f[m][j] = m;}// 填充 DP 表for (int i = m - 1; i >= 0; i--) {for (int j = 0; j < 26; j++) {if (t[i] == j + 'a')  // 當前字符匹配f[i][j] = i;else                  // 否則繼承 i+1 的結果f[i][j] = f[i + 1][j];}}// 遍歷 s,檢查是否能在 t 中找到匹配的字符int add = 0;  // 當前在 t 中的查找起始位置for (int i = 0; i < n; i++) {if (f[add][s[i] - 'a'] == m) {  // 字符 s[i] 在 t 中不存在return false;}add = f[add][s[i] - 'a'] + 1;  // 跳到匹配位置的下一個位置}return true;  // 所有字符都匹配成功}
};
  • 示例1:

    • 輸入:s = “abc”, t = “ahbgdc”

      • 預處理 t 后,f 會記錄每個字符的位置。

      • 匹配 s:

        • ‘a’ 在 t 的位置 0 → add = 1

        • ‘b’ 在 t 的位置 2 → add = 3

        • ‘c’ 在 t 的位置 5 → 匹配成功

    • 輸出:true

  • 示例2:

    • 輸入:s = “axc”, t = “ahbgdc”

      • ‘a’ 匹配 t[0] → add = 1

      • ‘x’ 在 t 中不存在 → 返回 false

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

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

相關文章

Python匿名函數與內置函數較難與較冷門知識點考前速記

5 lambda匿名函數與Python內置函數 lambda 函數通常用于編寫簡單的、單行的函數,通常在需要函數作為參數傳遞的情況下使用,例如在 map()、filter()、sorted()、list.sort() 等函數與方法中。 lambda語法格式: lambda arguments: expression lambda是 Python 的關鍵字,用…

DeepSeek談《鳳凰項目 一個IT運維的傳奇故事》

《鳳凰項目&#xff1a;一個IT運維的傳奇故事》&#xff08;The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win&#xff09;是Gene Kim、Kevin Behr和George Spafford合著的一部小說&#xff0c;通過虛構的故事生動展現了IT運維中的核心挑戰和Dev…

【上海大學數據庫原理實驗報告】MySQL基礎操作

實驗目的 熟悉MySQL基礎操作。 實驗內容 創建四張工程項目的關系表。 圖 1 四張工程項目關系表的結構 檢索供應零件編號為J1的工程的供應商編號SNO。檢索供應零件給工程J1&#xff0c;且零件編號為P1的供應商編號SNO。查詢沒有正余額的工程編號、名稱及城市&#xff0c;結果…

winget使用

Get-Command winget winget search qq winget install Tencent.QQ.NT

邏輯回歸在信用卡欺詐檢測中的實戰應用

在大數據和機器學習蓬勃發展的時代&#xff0c;信用卡欺詐檢測成為了保障金融安全的重要環節。邏輯回歸作為一種經典的機器學習算法&#xff0c;在這一領域發揮著關鍵作用。本文將通過一段完整的Python代碼&#xff0c;詳細解析邏輯回歸在信用卡欺詐檢測中的具體應用過程&#…

矯平機:金屬板材精密加工的“整形專家”

一、矯平機的定義與核心功能 矯平機&#xff08;Leveling Machine&#xff09;是金屬加工領域的關鍵設備&#xff0c;主要用于消除金屬板材或帶材在軋制、運輸過程中產生的內應力&#xff0c;矯正其彎曲、扭曲、波浪邊等形變缺陷&#xff0c;使材料達到毫米級甚至微米級的平整…

百度「心響」:通用超級智能體,重新定義AI任務執行新范式

在AI技術從“對話交互”邁向“任務執行”的轉折點&#xff0c;百度于2025年4月正式推出移動端超級智能體應用——心響。這款以“AI任務完成引擎”為核心的創新產品&#xff0c;被譽為“AI指揮官”&#xff0c;通過自然語言交互實現復雜任務的全流程托管&#xff0c;覆蓋知識解析…

游戲性能測試

1. 分階段&#xff0c;看目的&#xff0c;確定高中低三檔測試機&#xff0c;最低檔機的確定需要和客戶端主程和制作人等共同確定 確定三檔機的方式&#xff1a; 1. 要上線地區的top100&#xff0c;根據用戶占比&#xff0c;劃分出三檔 2. 根據用研部門提供的數據&#xff0c;確…

react-10樣式模塊化(./index.module.css, <div className={welcome.title}>Welcome</div>)

1.react樣式模塊化 避免各個組件類名相同 相關樣式沖突所以需要樣式模塊化。比如在組件Hello中的樣式引入&#xff0c;將樣式文件名更改為index.module.css如下圖。 2. 文件中引入模塊以及使用 文件中import引入模塊樣式 import welcome from "./index.module.css"…

4月30日星期三今日早報簡報微語報早讀

4月30日星期三&#xff0c;農歷四月初三&#xff0c;早報#微語早讀。 1、神舟十九號載人飛船因東風著陸場氣象原因推遲返回&#xff1b; 2、林毅夫&#xff1a;到2049年中國經濟體量有望達到美國的兩倍&#xff1b; 3、市場監管總局&#xff1a;2024年查辦商標、專利等領域違…

小剛說C語言刷題—1462小明的游泳時間

1.題目描述 倫敦奧運會要到了&#xff0c;小明在拼命練習游泳準備參加游泳比賽。 這一天&#xff0c;小明給自己的游泳時間做了精確的計時&#xff08;本題中的計時都按 24 小時制計算&#xff09;&#xff0c;它發現自己從 a 時 b 分一直游泳到當天的 c 時 d 分。 請你幫小…

SpringBoot+EasyExcel+Mybatis+H2實現導入

文章目錄 SpringBootEasyExcelMybatisH2實現導入1.準備工作1.1 依賴管理1.2 配置信息properties1.3 H2數據庫1.4 Spring Boot 基礎概念1.5 Mybatis核心概念 1.6 EasyExcel核心概念 2.生成Excel數據工具類-隨機字符串編寫生成Excel的java文件 3.導入功能并且存入數據庫3.1 返回結…

嵌入式開發高頻面試題全解析:從基礎編程到內存操作核心知識點實戰

一、數組操作&#xff1a;3x3 數組的對角和、偶數和、奇數和 題目 求 3x3 數組的對角元素和、偶數元素和、奇數元素和。 知識點 數組遍歷&#xff1a;通過雙重循環訪問數組的每個元素&#xff0c;外層循環控制行&#xff0c;內層循環控制列。對角元素判斷&#xff1a; 主對…

分布式優化與一致性算法python實現

目錄 摘要一、分布式優化問題描述二、一致性算法基礎2.1 平均一致性(Average Consensus)2.2 Gossip 協議三、分布式梯度下降(DGD)四、分布式 ADMM 與共識優化五、收斂性與參數選擇六、典型案例6.1 傳感器網絡參數估計6.1.1 問題描述6.1.2 算法設計6.1.3 實驗結果6.2 分布式…

突破SQL注入字符轉義的實戰指南:繞過技巧與防御策略

在滲透測試中&#xff0c;SQL注入始終是Web安全的重點攻擊手段。然而&#xff0c;當開發者對用戶輸入的特殊字符&#xff08;如單引號、反斜杠&#xff09;進行轉義時&#xff0c;傳統的注入方式往往會失效。本文將深入探討如何繞過字符轉義限制&#xff0c;并給出防御建議。 目…

算法導論第6章思考題

6.3-2 func(A) 1 A.heap-sizeA.len 2 \quad for i ? A . l e n 2 ? \lfloor {A.len\over2}\rfloor ?2A.len?? downto 1 3 \qquad MAX-HEAPIFY(A,i) 對于第2行的循環控制變量i來說&#xff0c;為啥要求它是從 ? A . l e n 2 ? \lfloor {A.len\over2}\rfloor ?2A.len??…

可商用,可離線運行,可API接口調用的開源AI數字人項目Heygem,喂飯級安裝教程

前言 Heygem 是一款開源項目&#xff0c;致力于發揮你電腦硬件的全部潛力&#xff0c;讓你無需依賴云端&#xff0c;也能在本地高效運行各類開源AI數字人模型。無論是 AI 語音對話、虛擬主播&#xff0c;還是數字人驅動引擎&#xff0c;Heygem 通過底層性能調度與資源管理優化&…

三個概念:DataBinding,Dependency Property 與DataTemplate

WPF 核心概念詳解&#xff1a;DataBinding、Dependency Property 和 DataTemplate 1. DataBinding (數據綁定) 基本概念 DataBinding 是 WPF 的核心機制&#xff0c;用于在 UI 元素和數據源之間建立自動同步關系。 關鍵特性 雙向綁定&#xff1a;數據變化自動反映到 UI&…

C語言教程(二十六):C 語言內存管理詳解

一、C 語言內存區域劃分 在 C 語言程序運行時,內存主要分為以下幾個區域: 1.1 棧區(Stack) 特點:由編譯器自動分配和釋放,主要存儲函數的局部變量、函數參數、返回地址等。棧區的內存分配和釋放是按照后進先出(LIFO)的原則進行的,速度快。示例: #include <stdio.…

騰訊云服務器性能提升全棧指南(2025版)

騰訊云服務器性能提升全棧指南&#xff08;2025版&#xff09; 一、硬件選型與資源優化 1. 實例規格精準匹配 騰訊云服務器提供計算型CVM、內存型MEM、大數據型Hadoop等12種實例類型。根據業務特性選擇&#xff1a; ? 高并發Web應用&#xff1a;推薦SA3實例&#xff0…