当前位置: 首页 > article >正文

最长公共子串 动态规划

#include<iostream>
#include<string.h>
#include<stdio.h>
#include<math.h>
using namespace std;
int main(){
    string s1,s2;
    cin>>s1>>s2;
    if(s1.size() > s2.size()) //以短的作为s1
        swap(s1,s2);
    int len1 = s1.size(), len2 = s2.size();
    int start = 0, mx = 0; //记录结果


    vector<vector<int> > dp(len1+1,vector<int>(len2+1,0));

 

初始化第0行

for j=0; j<len2; j++

  if s1[0] == s2[j]

       dp[0][j] = 1

初始化第0列

for i=0; i<len1; i++

  if s2[0] == s1[i]

       dp[i][0] = 1

下标从1开始,因为i,j依赖于 i-1,j-1
    for(int i = 1;i<=len1;i++){
        for(int j = 1;j<=len2;j++){

            字符相同,计数加1,且依赖于以上一个位置结尾的最长公共子串
            if(s1[i-1] == s2[j-1])
                dp[i][j] = dp[i-1][j-1] + 1;


            if(dp[i][j] > mx){
                mx = dp[i][j];
                start = i - mx;
            }
        }
    }
    cout<<s1.substr(start,mx);
    return 0;
}

 

 

 


http://www.kler.cn/a/136761.html

相关文章:

  • Flink概念知识讲解之:Restart重启策略配置
  • 使用WebSocket 获取实时数据
  • Golang开发-案例整理汇总
  • 我在广州学 Mysql 系列——有关数据表的插入、更新与删除相关练习
  • git理解记录
  • R语言基础| 中级绘图
  • 腾讯云轻量应用服务器三年租用价格表_免去续费困扰
  • 官宣!Sam Altman加入微软,OpenAI临时CEO曝光,回顾董事会‘’政变‘’始末
  • Dubbo开发系列
  • 2023 羊城杯 final
  • 【测试功能篇 01】Jmeter 压测接口最大并发量、吞吐量、TPS
  • git容易出问题的命令
  • gzip 压缩优化大 XML 响应的处理方法
  • 1688阿里巴巴API 1688商品采集API 1688获取商品列表API 订单API
  • c++ std::variant用法
  • django自带的cache无法多进程共享
  • 互联网上门洗衣洗鞋店小程序开发;
  • Python-列表和元祖的区别
  • 《深度学习500问》外链笔记
  • 从零开始:Rust环境搭建指南
  • DolphinDB 基于 Glibc 升级的性能优化实战案例
  • 美国费米实验室SQMS启动“量子车库”计划!30+顶尖机构积极参与
  • 在 Windows 中关闭 Nginx 所有进程
  • Java 获取本地ip网卡信息
  • Linux系统中sz和rz命令详解(文件传输、上传、下载)
  • 使用k8s部署一个简单MySQL8服务,但是不能挂载