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

动态规划---回文子串

题目:

给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。

回文字符串 是正着读和倒过来读一样的字符串。

子字符串 是字符串中的由连续字符组成的一个序列。

思路:

1.确定dp数组及含义

dp[i][j]代表字符串区间[i,j](左闭右闭)的字符是不是回文子串(true,false)

2.确定递推公式

如果s[i]!=s[j],一定不是回文子串,dp[i][j]=false

如果s[i]=s[j],要分情况讨论:

(1)j-i=0,是回文子串,dp[i][j]=true

(2)j-i=1,是回文子串,dp[i][j]=true

(3)j-i>1,要确定区间[i+1,j-1]的字符串是不是回文子串,如果是,那么dp[i][j]=true

3.初始化dp数组

全部初始化为false

4.确定遍历顺序

根据递推公式,需要从下到上,从左到右遍历

代码:

    public int countSubstrings(String s) {
        int len=s.length();
        char[] chars=s.toCharArray();
        boolean[][] dp=new boolean[len][len];
        int result=0;
        for(int i=len-1;i>=0;i--){
            for(int j=i;j<len;j++){
                if(chars[i]==chars[j]){
                    if(j-i<=1){
                        result++;
                        dp[i][j]=true;
                    }
                    else if(dp[i+1][j-1]==true){
                        result++;
                        dp[i][j]=true;
                    }
                }
            }
        }
        return result;
    }


http://www.kler.cn/news/310662.html

相关文章:

  • 55 mysql 的登录认证流程
  • 掌握MATLAB中的数据类型转换技巧
  • 21. 什么是MyBatis中的N+1问题?如何解决?
  • qt信号与槽(自定义)
  • 手势识别-Yolov5模型-自制数据集训练
  • Kafka是如何保证数据的安全性、可靠性和分区的
  • 共享股东分红模式小程序开发
  • [数据集][目标检测]葡萄成熟度检测数据集VOC+YOLO格式1123张3类别
  • C HTML格式解析与生成之gumbo
  • python怎么输入整数
  • 万能小程序运营管理系统 _requestPost 任意文件读取漏洞复现
  • DAY20240911 VUE:解锁前端路由的奥秘:如何在单页应用中避免404困境?
  • 流量牵引技术与传统防火墙的区别
  • 在网络环境中怎么保护个人信息安全?
  • 土壤墒情测定仪的工作原理
  • 汽车软件开发之敏捷开发
  • Spring 源码解读:手动实现Spring事件机制
  • JSON.parseArray 内存溢出
  • 【第十一章:Sentosa_DSML社区版-机器学习分类】
  • Oracle数据库高级技术探秘:分区表管理与代码实战
  • Python 全栈系列271 微服务踩坑记
  • 数据库学习02——mysql清空表数据后 IBD 文件仍很大的解决方案
  • 面向开发者的LLM入门教程(学习笔记01)
  • 探索学习Python的最佳开发环境和编辑器
  • 家用燃气报警器-家庭可燃气体探测器-旭华智能
  • 【网络安全】服务基础第二阶段——第四节:Linux系统管理基础----Linux网络与日志服务器
  • Docker 镜像制作(Dockerfile)
  • 为解决bypy大文件上传报错—获取百度云文件直链并使用Aria2上传文件至服务器
  • Mini-Omni:语言模型可以在流中听、说和思考
  • Docker本地部署Chatbot Ollama搭建AI聊天机器人并实现远程交互