代码随想录补打卡 647 回文子串 516 最长回文子序列

news/2024/11/24 9:56:37/

647 回文子串 

代码如下

func countSubstrings(s string) int {    //dp[i][j]数组的含义是i-j这个范围的元素是否为回文串 

         dp := make([][]bool,len(s))

         for i,_ := range dp {

             dp[i] = make([]bool,len(s))

             

         }

         res := 0 

         for i := len(s)-1 ; i >= 0 ; i-- {         因为dp[i][j]是由dp[i+1][j-1] 推出来的,所以要重底向上,从左往右遍历 

             for j := i  ; j < len(s) ; j++ {  j从i的位置向后移动,i向前移动,这样保证能够始终j不小于i

                 if s[i] == s[j] {         //如果两个元素相等

                     if j - i <= 1  {      并且两个元素相差小于1,即两个元素是同一个元素或者相差只有1 那么就必然是回文子串,结果加1 

                         dp[i][j] = true  

                         res++

                     }else if dp[i+1][j-1] == true {  如果两个元素的距离大于了1 ,那么就要判断dp[i+1][j-1] 是否为回文子串,如果  dp[i][j] 是回文子串,那么就说明这个也是回文子串 

                         dp[i][j] = true 

                         res++ 

                     }

                 }else {

                     dp[i][j] = false 如果两个元素不相同则不是回文子串

                 }

             }

         }

         return res 

}

516 最长回文子序列

代码如下 

func longestPalindromeSubseq(s string) int {  dp[i][j]的含义是i-j这个范围的最长回文子序列的长度 

              dp := make([][]int,len(s))

              for i := 0 ; i < len(s) ; i++ {

                  dp[i] = make([]int,len(s))

                  dp[i][i] = 1                            下标相同,则是回文子序列,且长度为1 

              }

              for i := len(s)-1 ; i >= 0 ; i--{

                  for j := i+1 ; j < len(s) ; j++ {

                      if s[i] == s[j] {                        如果两个元素相同,则在前一个的范围基础上加上2 

                          dp[i][j] = dp[i+1][j-1]+2

                      }else{

                          dp[i][j] = max(dp[i][j-1],dp[i+1][j])

                      }

                  }

              }

              return dp[0][len(s)-1]

}

func max(a,b int) int {

    if a > b {

        return a 

    }else {

        return b 

    }

}


http://www.ppmy.cn/news/108143.html

相关文章

点成分享丨ELISA实验的类型及原理

ELISA实验&#xff0c;即酶联免疫吸附测定&#xff08;Enzyme-Linked Immunosorbent Assay&#xff09;实验&#xff0c;是免疫学中的经典实验之一&#xff0c;它是一种利用抗原抗体特异性结合进行免疫反应的定性和定量检测方法&#xff0c;目前已被广泛应用于生物学、医学、植…

面试题第一期

1.如何让3个元素的四个间距平分盒子 justify-content: space-evenly; space-between:两端对齐,项目之间的间隔是相等的(n-1个间隔) space-evenly:均匀排列每个元素,每个元素之间的间隔相等(n+1) 第二种: margin-left:calc((100%-4*元素宽度)/4) 2.promise.all 特性是一个…

【HarmonyOS】hap包在多台设备中安装和HarmonyOS应用含多个module安装问题

在HarmonyOS应用开发过程中&#xff0c;大家会遇到一些hap安装问题&#xff0c;如多模块hap包存在调用如何在模拟器上统一运行、或者同一hap包如何在多台设备运行问题等&#xff0c;这里汇总一些hap安装问题解答&#xff0c;供大家参考。 【问题1】我的HarmonyOS工程创建了多个…

基于gazebo搭建仿真机器人环境

基于gazebo搭建自己的仿真机器人环境 给模型添加多线激光雷达

攻防世界-web-newscenter

题目描述&#xff1a;打开链接&#xff0c;只有一个搜索框&#xff0c;然后就是一条一条新闻的记录 开启burpsuite&#xff0c;我们在搜索框中随便输入点什么&#xff0c;然后进行搜索&#xff0c;看下抓到的包 这里搜索的时候只有一个search参数&#xff0c;查询到的新闻数也变…

小程序、网页跳转App的原理

从不同的渠道&#xff0c;如小程序、二维码、网页等&#xff0c;直接跳转到App内对应的页面&#xff0c;并传递相关的参数信息&#xff0c;已经由拥有深度链接技术的SDK实现了&#xff0c;App只需接入这类SDK即可获得多样化跳转的功能。本文将详细介绍多样化跳转的原理。 多样…

Spring Cloud Zuul 是什么?如何使用它来实现 API 网关?

Spring Cloud Zuul 是什么&#xff1f;如何使用它来实现 API 网关&#xff1f; 在微服务架构中&#xff0c;服务之间的通信变得非常频繁和复杂。为了简化服务之间的通信和管理&#xff0c;很多企业都采用了 API 网关的架构模式。API 网关可以帮助我们统一处理服务的入口、路由…

高压放大器在驱动压电陶瓷进行铝板无损检测中的应用研究

想要达成在不损害或不影响被测对象使用性能及自身性质的前提下&#xff0c;对被测对象内部进行缺陷&#xff0c;结构&#xff0c;失效分析&#xff0c;就得用到无损检测&#xff08;Non Destructive Testing&#xff09;技术&#xff0c;最常用的无损检测方法有很多&#xff0c…