@ 代码随想录算法训练营第8周(C语言)|Day60(动态规划)

news/2024/7/24 10:41:04 标签: 算法, c语言, 动态规划

@ 代码随想录算法训练营第8周(C语言)|Day60(动态规划

Day60、动态规划(包含题目 ● 647. 回文子串 ● 516.最长回文子序列 )

647. 回文子串

题目描述

给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

题目解答

int countSubstrings(char* s) {
   int s1=strlen(s);
   int dp[s1][s1];
   int res;
   res=0;
   memset(dp,0,sizeof(dp));
   for(int i=s1-1;i>=0;i--){
       for(int j=i;j<s1;j++){
           if(s[i]==s[j]){
               if(j-i<=1){
                   dp[i][j]=1;
                   res++;
               }else{
                   if(dp[i+1][j-1]==1){
                       dp[i][j]=1;
                       res++;
                   }
               }
               
           }
       }
   }
    return res;
}

题目总结

dp[i][j]:表示区间范围[i,j] (注意是左闭右闭)的子串是否是回文子串,如果是dp[i][j]为true,否则为false。看似是一个字符串,其实要比较两头,还是两个字符串。

516.最长回文子序列

题目描述

给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。

题目解答

int longestPalindromeSubseq(char* s) {
    int s1=strlen(s);
    int dp[s1][s1];
    memset(dp,0,sizeof(dp));
    for(int i=0;i<s1;i++){
        dp[i][i]=1;
    }
    for(int i=s1-1;i>=0;i--){
        for(int j=i+1;j<s1;j++){
            if(s[i]==s[j]){
                dp[i][j]=dp[i+1][j-1]+2;
            }else{
                dp[i][j]=fmax(dp[i+1][j],dp[i][j-1]);
            }
        }
    }
    return dp[0][s1-1];
}

题目总结

dp[i][j]:字符串s在[i, j]范围内最长的回文子序列的长度为dp[i][j]。


http://www.niftyadmin.cn/n/5391964.html

相关文章

Visual Studio清单作用

1、作用&#xff1a; 制定程序依赖的C运行库的dll及版本&#xff0c;包括mfc&#xff0c;atl&#xff0c;crt等&#xff0c;在Visual Studio安装目录下的vc/redist下有debug和release版本 2、确定应用程序依赖哪些visual C 库方法&#xff1a; 查看项目-》项目设置-》常规&…

图文说明Linux云服务器如何更改实例镜像

一、应用场景举例 在学习Linux的vim时&#xff0c;我们难免要对vim进行一些配置&#xff0c;这里我们提供一个vim插件的安装包&#xff1a; curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o./install.sh && bash ./install.sh 但是此安装包…

springboot217志同道合交友网站

springboot志同道合交友网站设计与实现 摘 要 现代经济快节奏发展以及不断完善升级的信息化技术&#xff0c;让传统数据信息的管理升级为软件存储&#xff0c;归纳&#xff0c;集中处理数据信息的管理方式。本志同道合交友网站就是在这样的大环境下诞生&#xff0c;其可以帮助…

第九天-自动化办公

1.基础-普通文件操作 1. shutil文件操作模块 文件的复制 复制文件 from shutil import copy copy("复制文件路径","目标位置") 文件内容的复制 from shutil import copyfile copyfile(来源文件&#xff0c;目标文件) 文件的剪切 可用于文件和文件夹 fr…

python:xml.etree.ElementTree 读 Freeplane.mm文件,生成测试案例.csv文件

Freeplane 是一款基于 Java 的开源软件&#xff0c;继承 Freemind 的思维导图工具软件&#xff0c;它扩展了知识管理功能&#xff0c;在 Freemind 上增加了一些额外的功能&#xff0c;比如数学公式、节点属性面板等。 强大的节点功能&#xff0c;不仅仅节点的种类很多&#xf…

linux 文本编辑命令【重点】

目录 vi&vim介绍 vim安装 vim使用 查找命令 find grep 文本编辑的命令&#xff0c;主要包含两个: vi 和 vim vi&vim介绍 作用: vi命令是Linux系统提供的一个文本编辑工具&#xff0c;可以对文件内容进行编辑&#xff0c;类似于Windows中的记事本 语法: vi file…

odoo16-API(Controller)带有验证访问的接口

odoo16-API&#xff08;Controller&#xff09;带有验证访问的接口 目前我使用odoo原生的登录token来验证登陆的有效性 废话不多说直接上代码 # 测试获取session_id import requests class GetOdooData(http.Controller):def getOdooToken(self):# http://localhost:8123访问…

我的NPI项目之设备系统启动(八) -- Android14的GKI2.0开发步骤和注意事项

GKI是什么&#xff1f; Google为什么要推行GKI&#xff1f; GKI全称General Kernel Image。GKI在framework和kernel之间提供了标准接口&#xff0c;使得android OS能够轻松适配/维护/兼容不同的设备和linux kernel。 Google引入GKI的目的是将Framework和Kernel进一步的解耦。因…