力扣1143. 最長公共子序列(動態規劃)

Problem: 1143. 最長公共子序列

文章目錄

  • 題目描述
  • 思路
  • 復雜度
  • Code

題目描述

在這里插入圖片描述在這里插入圖片描述

思路

我們統一標記:str1[i]代表text1表示的字符數組,str2[j]代表text2表示的字符數組;LCS代表最長的公共子序列;(我們易得只有str1[i]和str2[j]均在LCS中時才能說明str1[i]和str2[j]是LCS的一部分

1.狀態定義:dp[i][j]代表str1[1~i]和str2[1 ~ j]的最長公共子序列(我們暫時認為索引是從 1 開始的,例如:d[2][4] 的含義就是:對于 “ac” 和 “babc” ,它們的LCS ?度是 2)
image.png
2.狀態轉移:

2.1:初始狀態初始化:我們初始化dp[0][j] = 0; dp[i][0] = 0,邏輯上說明,當str1或者str2其中為空時則LCS為0;
2.2:狀態轉移:若*str1[i] == str2[j]dp[i][j] = dp[i - 1][j - 1] + 1;若str1[i] != str2[j]*則dp[i][j] == max(dp[i-1][j],dp[i][j-1])

補充:

當*str1[i] != str2[j]*實則有三種狀態:str1[i] != LCS[i];str2[j] != LCS[j]; str1[i] != str2[i] != LCS[i];但是我們在狀態轉移方程中dp[i][j] == max(dp[i-1][j],dp[i][j-1]);
實際上dp[i][j] == max(dp[i-1][j],dp[i][j-1],dp[i - 1][j - 1]),但是回看dp[i][j]的定義我們易知dp[i - 1][j - 1]是一定小于dp[i-1][j]和dp[i][j-1],所以我們則直接求取**max(dp[i-1][j],dp[i][j-1])**即可

復雜度

時間復雜度:

O ( M × N ) O(M \times N) O(M×N);其中 M M M為text1的長度, N N N為text2的長度

空間復雜度:

O ( M × N ) O(M \times N) O(M×N)

Code

class Solution {
public:/*** Find the longest common subsequence* @param text1 Given string* @param text2 Given string* @return int*/int longestCommonSubsequence(string text1, string text2) {int len1 = text1.length();int len2 = text2.length();//DP arrayvector<vector<int>> dp(len1 + 1, vector<int>(len2 + 1));//for (int i = 1; i < len1 + 1; ++i) {for (int j = 1; j < len2 + 1; ++j) {if (text1.at(i - 1) == text2.at(j - 1)) {dp[i][j] = 1 + dp[i - 1][j - 1];} else {dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);}}}return dp[len1][len2];}
};

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

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

相關文章

Flutter中Widget的生命周期

Widget生命周期&#xff1a; createState-initState-didChangeDependency-build-deactive-dispose 可通過WidgetsBinding類對widget生命周期的回調進行監控。 createState&#xff1a;StatefulWidget 中用于創建 State&#xff1b; initState&#xff1a;State 的初始化操作&am…

CLion遠程調試C++

文件映射到 可以右鍵文件夾選擇重新Cmake 編譯

xsslabs第七關

源碼 <!DOCTYPE html><!--STATUS OK--><html> <head> <meta http-equiv"content-type" content"text/html;charsetutf-8"> <script> window.alert function() { confirm("完成的不錯&#xff01;"…

【刷題】Leetcode 1609.奇偶樹

Leetcode 1609.奇偶樹 題目描述廣度優先搜索&#xff08;BFS&#xff09;深度優先算法&#xff08;DFS&#xff09; 思路一&#xff08;BFS&#xff09;思路二&#xff08;DFS&#xff09;Thanks?(&#xff65;ω&#xff65;)&#xff89;謝謝閱讀&#xff01;&#xff01;&a…

ShardingSphere Narayana XA 事務不回滾問題定位

ShardingSphere Narayana XA 事務不回滾問題定位 問題背景 用戶反饋&#xff0c;在使用 ShardingSphere Narayana 執行 XA 事務時&#xff0c;發生報錯&#xff1a;java.sql.SQLException: javax.transaction.RollbackException: TransactionImple.enlistResource - ARJUNA0…

數字后端——DEF文件格式

文章目錄 MACRO的不同orientationDEF中在macro orientation定義前需要留空格 MACRO的不同orientation DEF中在macro orientation定義前需要留空格 像下圖中這種方向和分號之間沒有空格的情況&#xff0c;就是有問題的格式。

C語言清空文件夾、C語言判斷文件夾下的文件夾是否存在,如果存在就清空,如果不存在則建立

代碼解法不唯一&#xff0c;請在評論區留下你的實現方式和想法&#xff0c;我會將好的解法更新到文章中&#xff01;&#xff01; 要在C語言中判斷文件夾下的文件夾是否存在&#xff0c;如果存在就清空&#xff0c;如果不存在則建立&#xff0c;需要使用C標準庫中的系統調用或…

數學學習與研究雜志社《數學學習與研究》雜志社編輯部2023年第29期目錄

考試研究 提高高三數學二輪復習質量的思考與實踐 佘淮青; 2-4 提升高三數學復習質量的策略探究 王飛; 5-7 核心素養背景下的高中數學命題策略研究 陳明發; 8-10 提升中考數學復習課的有效性研討 韓興宏; 11-13 中學教學方法《數學學習與研究》投稿&#xff1a;…

將c、c++變為python

1.編寫cpp文件 #include "pycpp.h" #include <iostream>using namespace std;PyCpp::PyCpp(){}void PyCpp::sayHello(int a){cout << "Hello Python, I am C."<<a << endl; }2.編寫頭文件&#xff08;聲明變量&#xff09; clas…

SpringBoot之自定義Redis緩存key的生成策略配置

SpringBoot之自定義Redis緩存key的生成策略配置 文章目錄 SpringBoot之自定義Redis緩存key的生成策略配置1. SpringBoot版本2. Redis緩存配置類 自定義緩存key生成策略&#xff1b;key與value的序列化&#xff1b;key過期配置管理器 1. SpringBoot版本 <parent><group…

pyuic生成py文件到指定文件夾

pyuic生成py文件到指定文件夾 關于如何在pycharm配置外部工具的方法這里不做贅述&#xff0c;本文主要說明&#xff0c;如何利用pyuic將ui文件生成到指定的項目目錄中。 前提條件&#xff1a;已配置的pyuic工具可以正常使用生成文件到目錄中。 一、打開外部工具配置頁面 打開…

如何用Python檢查時間序列數據是否平穩?

時間序列數據通常以其時間性質為特征。這種時間性質為數據增加了趨勢或季節性&#xff0c;使其與時間序列分析和預測兼容。如果時間序列數據不隨時間變化或沒有時間結構&#xff0c;則稱其為靜態數據。因此&#xff0c;檢查數據是否平穩是非常必要的。在時間序列預測中&#xf…

用HTML5的<canvas>元素實現刮刮樂游戲

用HTML5的<canvas>元素實現刮刮樂 用HTML5的<canvas>元素實現刮刮樂&#xff0c;要求&#xff1a;將上面的“圖層”的圖像可用鼠標刮去&#xff0c;露出下面的“圖層”的圖像。 示例從簡單到復雜。 簡單示例 準備兩張圖像&#xff0c;我這里上面的圖像top_imag…

node express實現Excel文檔轉json文件

有些場景我們需要將Excel文檔中的內容抽取出來生成別的文件&#xff0c;作為一個前端&#xff0c;服務框架最應該熟悉的就是node了&#xff0c;以下是基于多語言轉換實現代碼&#xff0c;看明白原理自己改一改就能用了 1.安裝node環境 2.創建一個文件夾&#xff0c;文件夾中創建…

7、Redis-事務、持久化、內存淘汰機制和過期key處理

目錄 一、事務 二、持久化 三、內存淘汰機制 四、過期key處理 一、事務 Redis的事務本質上就是一個批量執行命令的操作。分為三個步驟&#xff1a; 開始事務&#xff1a;multi命令入隊&#xff1a;正常輸入命令即可執行事務&#xff08;依次執行命令&#xff09;&#xf…

掌握java模板方法模式,提升代碼復用與擴展的藝術

Java 模板方法模式是一種行為型設計模式&#xff0c;它定義了一個算法的骨架&#xff0c;并將一些步驟延遲到子類中實現。模板方法模式使得子類可以在不改變算法結構的情況下重定義算法中的某些步驟。 使用場景 算法骨架固定&#xff1a;如果一個算法的基本結構已經固定&#…

跨專業考研難度大嗎?聽聽過來人的真實經歷

在考研的大潮中&#xff0c;跨專業考研成為了一個不可忽視的現象。許多考生因為對原專業失去興趣、追求職業夢想或其他原因&#xff0c;選擇了跨專業報考。那么&#xff0c;跨專業考研的難度究竟有多大呢&#xff1f;今天&#xff0c;我們就來聊聊這個話題&#xff0c;聽聽過來…

不是我吹,這8道HashMap面試題讓你面試時對答如流

前言 又到了一年一度的金三銀四面試季&#xff0c;我們拿著自己的面試秘籍去面試&#xff0c;但是面試官的問題五花八門&#xff0c;讓我們摸不清他們的套路。今天我就總結了面試時必問的hashmap面試題&#xff0c;無論面試官怎么問&#xff0c;我們都對答如流。 另外本人整理了…

java小記(2)

IS-A&#xff1a;類的父子繼承關系。 default&#xff1a;關鍵字&#xff0c;與Java中的public&#xff0c;private等關鍵字一樣&#xff0c;都屬于修飾符關鍵字&#xff0c;可以用來修飾屬性、方法以及類&#xff0c;但是default一般用來修飾接口中的方法。 接口與抽象類的區…

代碼隨想錄算法訓練營第二十四天 | 77. 組合

回溯算法理論基礎 https://programmercarl.com/%E5%9B%9E%E6%BA%AF%E7%AE%97%E6%B3%95%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 回溯法也可以叫做回溯搜索法&#xff0c;它是一種搜索的方式。 回溯是遞歸的副產品&#xff0c;只要有遞歸就會有回溯。 回溯法并不是什么高效的…