利用动态规划法、中心扩展法解决回文子串

利用动态规划法、中心扩展法解决回文子串

  • 动态规划法:1.确定dp[][],对角线是true(因为单个字母为回文串)

  • 2.枚举子串长度,从底至右上角填完表格

  • 3.当Si!=Sj时,false,当Si==Sj时,当最多3个字母为true,当大于3个字母取决于S[i+1,j-1]

    在这里插入图片描述

  • 中心扩展法:1.边界情况为1个字母或者2个字母,扩展

  • 2.当扩展到两边字母不一致时,停止扩展

    在这里插入图片描述

5 最长回文子串

/*** 最长回文子串*/
public class $5 {public String longestPalindrome(String s) {int len = s.length();if (len < 2) { //注意return s;}boolean[][] dp = new boolean[len][len];//初始化,所有长度为1的子串都是回文串,斜对角线为truefor (int i = 0; i < len; i++) {dp[i][i] = true;}int maxLen = 1; //注意int begin = 0;//先枚举子串长度for (int L = 2; L <= len; L++) { //L<=len 注意//枚举左边界for (int i = 0; i < len; i++) {//确定右边界int j = L+i-1;//如果右边界越界,则退出当前循环if (j >= len) {break;}//当s的第i和第j个字母不同时,不是回文串if (s.charAt(i) != s.charAt(j)) {dp[i][j] = false;} else { //当s的第i和第j个字母相同时if (j-i<3) { //最多3个字母时,肯定是是回文串dp[i][j] = true;} else { //大于3个字母时,取决于s[i+1,j-1]是否为回文串dp[i][j] = dp[i+1][j-1];}}if (dp[i][j] && j-i+1 > maxLen) {maxLen = j-i+1;begin = i;}}}return s.substring(begin, begin+maxLen); //begin+maxLen 注意}
}
/*** 最长回文子串*/
public class $5 {//中心扩展法public String longestPalindrome2(String s) {
//        if (s == null || s.isEmpty()) {
//            return "";
//        }int start = 0;int end = 0;for (int i = 0; i < s.length(); i++) {//偶数和奇数长度的回文串是不同的情况,同时考虑int len1 = expandAroundCenter(s, i, i);int len2 = expandAroundCenter(s, i, i+1);int len = Math.max(len1, len2);//时刻保证最长的回文长度//以i为中心,扩展len的长度,若len为奇数,则i左右长度相等,若len为偶数,则i左比i右少1if (len > end - start) {start = i - (len-1)/2;end = i + len/2;}}return s.substring(start, end+1);}private int expandAroundCenter(String s, int left, int right) {//针对i不断扩展,若两边值相等,则可以继续扩展while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;}return right - left - 1;}
}

647 回文子串

/*** 回文子串*/
public class $647 {public int countSubstrings(String s) {int len = s.length();boolean[][] dp = new boolean[len][len];int res = 0;for (int i = 0; i < len; i++) {dp[i][i] = true;res++;}for (int l = 2; l <= len; l++) {for (int i = 0; i < len; i++) {int j =  i+l-1;if (j >= len) {break;}if (s.charAt(i) == s.charAt(j)) {if (j - i < 3) {dp[i][j] = true;} else {dp[i][j] = dp[i+1][j-1];}} else {dp[i][j] = false;}if (dp[i][j]) {res++;}}}return res;}
}
/*** 回文子串*/
public class $647 {//扩展法public int countSubstrings2(String s) {int cnt = 0;for (int i = 0; i < s.length(); i++) {cnt += expand(s, i, i);cnt += expand(s, i, i+1);}return cnt;}private int expand(String s, int left, int right) {int cnt = 0;while (left >= 0 && right < s.length() && s.charAt(left) == s.charAt(right)) {left--;right++;cnt++;}return cnt;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/583024.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】数据结构——排序(一)

&#x1f497;个人主页&#x1f497; ⭐个人专栏——数据结构学习⭐ &#x1f4ab;点击关注&#x1f929;一起学习C语言&#x1f4af;&#x1f4ab; 目录 导读&#xff1a;数组打印与交换1. 插入排序1.1 直接插入排序1.1.1 基本思想1.1.2 实现代码1.1.3 图解 1.2 希尔排序1.2.1…

github和gitee上比较有影响力的python爬虫项目

以下是 GitHub 上一些有影响力的 Python 网络爬虫项目:Scrapy :一个快速的、高级的 Python 网络爬虫与网页抓取框架​​。Botasaurus :被描述为一个全能的网络爬虫框架​Botasaurus ​。Everything Web Scraping :David Teather 在 YouTube 上教授网络爬虫的项目,适合学习…

H266/VVC量化编码技术概述

量化 量化&#xff1a; 是将信号的连续取值&#xff08;或大量可能的离散取值&#xff09;映射为有限多个离散幅值的过程&#xff0c;实现信号取值多对一的映射。在视频编码中&#xff0c;残差信号经过变换之后&#xff0c;变换系数往往具有较大的动态范围。因此&#xff0c;对…

中央集成式架构量产时代,openVOC方案将引发软件开发模式变革

2024年&#xff0c;中央计算区域控制架构正式进入规模化量产周期&#xff0c;汽车智能化正式迈入2.0时代&#xff0c;产业生态、应用创新、开发模式都将迎来巨大变革。 同时&#xff0c;随着ChatGPT引发的AIGC领域的爆发式增长&#xff0c;人工智能技术掀起全球万亿级信息化应…

右键菜单“以notepad++打开”,在windows文件管理器中

notepad 添加到文件管理器的右键菜单中 找到安装包&#xff0c;重新安装一般即可。 这里有最新版&#xff1a;地址 密码:f0f1 方法 在安装的时候勾选 “Context Menu Entry” 即可 Notepad的右击打开文件功能 默认已勾选 其作用是添加右键快捷键。即&#xff0c;对于任何…

Android---Kotlin 学习013

互操作性和可空性 Java 世界里所有对象都可能是 null&#xff0c;而 kotlin 里面不能随便给一个变量赋空值的。所有&#xff0c;kotlin 取调用 java 的代码就很容易出现返回一个 null&#xff0c;而 Kotlin 的接收对象不能为空&#xff0c;你不能想当然地认为 java 的返回值就…

鸿蒙APP的代码规范

鸿蒙APP的代码规范是为了确保代码质量、可读性和可维护性而定义的一系列规则和标准。以下是一些建议的鸿蒙APP代码规范&#xff0c;希望对大家有所帮助。北京木奇移动技术有限公司&#xff0c;专业的软件外包开发公司&#xff0c;欢迎交流合作。 1. 代码风格&#xff1a; 采用…

Mybatis SQL构建器类 - 问题答案

问题 Java开发人员可能会碰到的最棘手的事情之一就是在Java代码中嵌入SQL语句。通常情况下&#xff0c;这是因为需要动态生成SQL语句 - 否则可以将其外部化到文件或存储过程中。正如你已经了解到的&#xff0c;MyBatis在其XML映射功能中有一个强大的解决方案来生成动态SQL。然…

OpenCV-Python(21):轮廓特征及周长、面积凸包检测和形状近似

2. 轮廓特征 轮廓特征是指由轮廓形状和结构衍生出来的一些特征参数。这些特征参数可以用于图像识别、目标检测和形状分析等应用中。常见的轮廓特征包括&#xff1a; 面积&#xff1a;轮廓所包围的区域的面积。周长&#xff1a;轮廓的周长&#xff0c;即轮廓线的长度。弧长&…

防火墙什么用,软件防火墙与硬件防火墙有什么不一样

防火墙是一种网络安全技术&#xff0c;通过有机结合各类用于安全管理与筛选的软件和硬件设备&#xff0c;在计算机网络的内、外网之间构建一道相对隔绝的保护屏障&#xff0c;以保护用户资料与信息的安全性。 防火墙的作用的详细说明&#xff1a; 1.访问控制&#xff1a;防火…

《LIO-SAM阅读笔记》3.后端优化

前言&#xff1a; LIO-SAM后端优化部分写在了mapOptimization.cpp文件中&#xff0c;本部分主要进行了激光帧的scan-to-map匹配&#xff0c;回环检测以及关键帧的因子图优化。本部分主要有两个环节同步进行&#xff0c;一个单独开辟了回环检测线程&#xff0c;另外一个是lidar…

Vue2面试题:说一下什么是路由守卫?

是路由跳转前、后的一些钩子函数 分类&#xff1a; 全局守卫&#xff1a;【写在main.js中 或 router文件夹下的index.js中】 beforeEach: 进入路由之前的验证&#xff08;常用&#xff0c;如&#xff1a;判断用户是否登录&#xff09; afterEach: 路由进入之后的验证&#xff0…

[云原生] Go web工作流程

web工作流程 Web服务器的工作原理可以简单地归纳为 客户机通过TCP/IP协议建立到服务器的TCP连接客户端向服务器发送HTTP协议请求包&#xff0c;请求服务器里的资源文档服务器向客户机发送HTTP协议应答包&#xff0c;如果请求的资源包含有动态语言的内容&#xff0c;那么服务器…

06|调用模型:使用OpenAI API还是微调开源Llama2/ChatGLM?

06&#xff5c;调用模型&#xff1a;使用OpenAI API还是微调开源Llama2/ChatGLM&#xff1f; 让我们带着下面的问题来开始这一节课的学习。大语言模型&#xff0c;不止 ChatGPT 一种。调用 OpenAI 的 API&#xff0c;当然方便且高效&#xff0c;不过&#xff0c;如果我就是想用…

解决Java编译出现类名不匹配报错

当遇到Java编译错误时&#xff0c;很多时候都是由于类名与文件名不匹配导致的。在Java中&#xff0c;公共类的名称必须与其所在的文件名一致&#xff0c;包括大小写敏感。下面是我在编译第一个Java程序"HelloWorld"时遇到的问题和解决办法的记录。 问题描述 在终端…

HCIA-Datacom题库(自己整理分类的)——OSPF协议多选

ospf的hello报文功能是 邻居发现 同步路由器的LSDB 更新LSA信息 维持邻居关系 下列关于OSPF区域描述正确的是 在配置OSPF区域正确必须给路由器的loopback接配置IP地址 所有的网络都应在区域0中宣告 骨干区域的编号不能为2 区域的编号范围是从0.0.0.0到255.255.255.255…

第十二章 Sleuth分布式请求链路跟踪

Sleuth分布式请求链路跟踪 gitee:springcloud_study: springcloud&#xff1a;服务集群、注册中心、配置中心&#xff08;热更新&#xff09;、服务网关&#xff08;校验、路由、负载均衡&#xff09;、分布式缓存、分布式搜索、消息队列&#xff08;异步通信&#xff09;、数…

VisualStudio项目中多个同名文件处理

问题 在vs2019环境中&#xff0c;现在开发一个较大的C项目&#xff0c;它的源文件在多个文件夹中组织(在文件系统上)。在其中两个文件夹中&#xff0c;有几个同名的文件。如&#xff1a; .\ConsoleApplication1\JAMGEN_CONFIG_x4_test\firls.c .\ConsoleApplication1\NoiseCo…

YOLOv8训练自定义数据集和运行参数解读

1、YOLOv8深度学习环境搭建及安装 1.1. Yolov8介绍 设置操作类型 YOLOv8模型可用于各种任务&#xff0c;包括检测、分割和分类。这些任务的不同之处在于它们产生的输出类型和它们要解决的特定问题。 **检测:**检测任务涉及识别和定位图像或视频中感兴趣的对象或区域。YOLO模…

多模态大模型-CogVLm 论文阅读笔记

多模态大模型-CogVLm 论文阅读笔记 COGVLM: VISUAL EXPERT FOR LARGE LANGUAGEMODELS 论文地址 :https://arxiv.org/pdf/2311.03079.pdfcode地址 : https://github.com/THUDM/CogVLM时间 : 2023-11机构 : zhipuai,tsinghua关键词: visual language model效果:&#xff08;2023…