最長子串問題(LCS)--動態規劃解法

題目描述:

如果Z既是X的子串,又是Y的子串,則稱Z為X和Y的公共子串。

如果給定X、Y,求出最長Z及其長度。

注意:這里求的不是子序列,兩者的意思并不相同。子串要求連續,子序列并不需要。

如果想要了解可以看這一篇最長子序列問題(LCS)--動態規劃解法

示例:

輸入

ABACCB

AACCAB

輸出

ACC

3

分析:

dp[i][j]表示X從0到i與Y從0到j之間公共子串的長度。

代碼:

?

//最長字串問題,不是最長子序列問題
#include<iostream>
#include<string>
using namespace std;const int N = 1000;
int dp[N][N] = { 0 };int  main()
{string a, b;cin >> a;cin >> b;int lena = a.size();int lenb = b.size();int maxLen = 0;//最長字串長度int start = 0;//最長字串在a中的初始下標//本來要將dp[i][0]和dp[0][j]全都初始化,但是因為是0,所以可以省略//直接dpfor (int i = 0; i <lena; i++){for (int j = 0; j <lenb; j++){if (a[i] == b[j]){if (i > 0 && j > 0){dp[i][j] = dp[i - 1][j - 1] + 1;}else{dp[i][j] = 1;}}//如果a[i]!=b[i],則dp[i][j] = 0//這是因為子串要連續,走到i,j就斷了這個連續。else{dp[i][j] = 0;//這步可以省略,因為初始值就是0;}if (dp[i][j] > maxLen){maxLen = dp[i][j];//更新最長字串長度start = i - maxLen + 1;//記錄最長字串在a中的初始下標}}}cout << "dp數組為:" << endl;for (int i = 0; i < lena; i++){for (int j = 0; j < lenb; j++){cout << dp[i][j] << ' ';}cout << endl;}cout << "最長子串長度為:" << maxLen << endl;cout << "最長子串為" << a.substr(start, maxLen) << endl;system("pause");return 0;}

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

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

相關文章

simulinkveristandlabview聯合仿真環境搭建

目錄 開篇廢話 軟件版本 明確需求 軟件安裝 matlab2020a veristand2020 R4 VS2017 VS2010 軟件安裝驗證 軟件資源分享 開篇廢話 推免之后接到的第一個讓人難繃的活&#xff0c;網上開源的軟件資料和成功的案例很少&#xff0c;查來查去就那么幾篇&#xff0c;而且版本…

SpringData

1.為什么要學習SpringData&#xff1f; 是因為對數據存儲的框架太多了&#xff0c;全部都要學習成本比較高&#xff0c;SpringData對這些數據存儲層做了一個統一&#xff0c;學習成本大大降低。

SQL命令---修改字段的數據類型

介紹 使用sql語句修改字段的數據類型。 命令 alter table 表明 modify 字段名 數據類型;例子 有一張a表&#xff0c;表里有一個id字段&#xff0c;長度為11。使用命令將長度修改為12 下面使用命令進行修改&#xff1a; alter table a modify id int(12) NOT NULL;下面使修…

stm32使用多串口不輸出無反應的問題(usart1、usart2)

在使用stm32c8t6單片機時&#xff0c;由于需要使用兩個串口usart1 、usart2。usart1用作程序燒錄、調試作用&#xff0c;串口2用于與其它模塊進行通信。 使用串口1時&#xff0c;正常工作&#xff0c;使用串口2時&#xff0c;無反應。查閱了相關資料串口2在PA2\PA3 引腳上。RX…

[僅供學習,禁止用于違法]編寫一個程序來手動設置Windows的全局代理開或關,實現對所有網絡請求攔截和數據包捕獲(抓包或VPN的應用)

文章目錄 介紹一、實現原理二、通過注冊表設置代理2.1 開啟代理2.2 關閉代理2.3 添加代理地址2.4 刪除代理設置信息 三、代碼實戰3.1 程序控制代理操作控制3.1.1 開啟全局代理3.1.2 添加代理地址3.1.3 關閉代理開關3.1.4 刪除代理信息 3.2 攔截所有請求 介紹 有一天突發奇想&am…

在git使用SSH密鑰進行github身份認證學習筆記

1.生成ssh密鑰對 官網文檔&#xff1a;Https://docs.github.com/zh/authentication&#xff08;本節內容對應的官方文檔&#xff0c;不清晰的地方可參考此內容&#xff09; 首先&#xff0c;啟動我們的git bush&#xff08;在桌面右鍵&#xff0c;點擊 Git Bush Here &#xf…

iOS_制作 cocopods庫

文章目錄 1.創建項目2.配置項目3.發布 1.創建項目 在 github 上創建倉庫&#xff0c;克隆到本地&#xff1a; git clone https://github.com/mxh-mo/MOOXXX.git在項目目錄下執行&#xff1a; pod lib create <庫名稱>進行一些配置的選擇&#xff1a; # 希望在那個平臺…

隨機分詞與tokenizer(BPE->BBPE->Wordpiece->Unigram->sentencepiece->bytepiece)

0 tokenizer綜述 根據不同的切分粒度可以把tokenizer分為: 基于詞的切分&#xff0c;基于字的切分和基于subword的切分。 基于subword的切分是目前的主流切分方式。subword的切分包括: BPE(/BBPE), WordPiece 和 Unigram三種分詞模型。其中WordPiece可以認為是一種特殊的BPE。完…

實時最優控制(Real-Time Optimal Control)工具

系列文章目錄 前言 許多現代控制方法&#xff0c;如模型預測控制&#xff08;model-predictive control&#xff09;&#xff0c;在很大程度上依賴于實時解決優化問題。特別是&#xff0c;高效解決優化控制問題的能力使復雜機器人系統在實現高動態行為&#xff08;highly dyna…

求Sn=m+mm+mmm+...+mm..mmm(有n個m)的值

題目&#xff1a;求 的值 一、做這個題我們其實可以直接一個for求解&#xff1a; a,aa,aaa...我們很容易知道它們后一項與前一項的關系就是&#xff1b; public static void Sum(int m,int n){long sum 0L;long curAn 0;for (int i 0; i < n; i){curAn m 10* curAn;/…

Qexo博客后臺管理部署

Qexo博客后臺管理部署 個人主頁 個人博客 參考文檔 https://www.oplog.cn/qexo/本地部署 采用本地Docker部署管理本地Hexo 下載代碼包 若無法下載使用科學工具下載到本地在上傳到服務器 wget https://github.com/Qexo/Qexo/archive/refs/tags/3.0.1.zip# 解壓 unzip Qexo…

C++中的前綴和

C中的前綴和&#xff08;Prefix Sum&#xff09;是一種優化算法&#xff0c;用于計算原數組中每個元素前綴和&#xff08;前面所有元素的累加和&#xff09;&#xff0c;可以在O(n)時間內實現。 #include<iostream> using namespace std;const int MAXN 100010;int Pre…

Linux comm命令教程:如何比較兩個文件的內容(附案例詳解和注意事項)

Linux comm命令介紹 comm命令是Linux系統中的一個命令&#xff0c;用于比較兩個已排序的文件或流。默認情況下&#xff0c;comm將始終顯示三列。第一列顯示只在第一個文件中的非匹配項&#xff0c;第二列顯示只在第二個文件中的非匹配項&#xff0c;第三列顯示兩個文件中的匹配…

Java開源工具庫Guava使用指南

Guava是一個功能強大的Java開源工具庫&#xff0c;提供了很多實用的工具類和函數&#xff0c;可以簡化開發過程。本文將介紹Guava的一些基本用法和常用功能。 添加Guava依賴 在開始使用Guava之前&#xff0c;首先需要在項目中添加Guava的依賴。可以通過Maven或Gradle來管理依…

Centos7.9下的celery無法直接使用-沒有找到命令

問題 關于centos7.9下執行celery -A project worker -l debug -P eventlet 找不到celery命令 -bash: celery: command not found 解決辦法 # /usr/local/Python3 為你的python路徑 echo export PATH/usr/local/Python3/bin:$PATH >> /etc/profile.d/python3.sh source /…

在循環內錯誤使用函數定義(js的問題)

考慮下面代碼&#xff1a; var elements document.getElementsByTagName(input); var n elements.length; // Assume we have 10 elements for this example for (var i 0; i < n; i) {elements[i].onclick function() {console.log("This is element #" …

利用WSL Linux編譯OpenBMC

WSL2安裝 &#xff08;1&#xff09; 舊版 WSL 的手動安裝步驟 | Microsoft Learn &#xff08;2&#xff09; https://www.cnblogs.com/37yan/p/16169564.html &#xff08;3&#xff09; 在win10中安裝linux--使用WSL_wsl.conf-CSDN博客 安裝Ubuntu 18.04 on Windows 安…

聯合體和枚舉

聯合體&#xff1a; 聯合體是什么&#xff1f; 聯合體也是一種自定義類型&#xff0c;這種類型定義的變量也包含一系列類型&#xff0c;特征是這些類型公用一塊內存空間(所以叫聯合體也叫公用體)可以理解為結構體公用一塊內存。 //聯合-聯合體-共用體 //聯合也是一種特殊的自…

TOMCAT9安裝

1、官網下載 2、解壓到任意盤符&#xff0c;注意路徑不要有中文 3、環境變量 path 下 配置 %CATALINA_HOME%\bin 4、找到tomcat9/bin&#xff0c; 點擊 start.bat啟動 tomcat

目標檢測、目標跟蹤、重識別

文章目錄 環境前言項目復現特征提取工程下載參考資料 環境 ubuntu 18.04 64位yolov5deepsortfastreid 前言 基于YOLOv5和DeepSort的目標跟蹤 介紹過針對行人的檢測與跟蹤。本文介紹另一個項目&#xff0c;結合 FastReid 來實現行人的檢測、跟蹤和重識別。作者給出的2個主…