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

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

  • 动态规划法: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…

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; 采用…

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

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

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

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

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…

一键访问多功能数据解决方案:如何轻松构建和管理APITable智能多维表格

文章目录 前言1. 部署APITable2. cpolar的安装和注册3. 配置APITable公网访问地址4. 固定APITable公网地址 前言 vika维格表作为新一代数据生产力平台&#xff0c;是一款面向 API 的智能多维表格。它将复杂的可视化数据库、电子表格、实时在线协同、低代码开发技术四合为一&am…

《数据库开发实践》之触发器

一、什么是触发器&#xff1f; 1.概念&#xff1a; 简单来说触发器就是一种特殊的存储过程&#xff0c;在数据库服务器触发事件的时候会自动执行其SQL语句集。 2.构成四要素&#xff1a; &#xff08;1&#xff09;名称&#xff1a;要符合标识符命名规则 &#xff08;2&am…

[OCR]Python 3 下的文字识别CnOCR

目录 1 CnOCR 2 安装 3 实践 1 CnOCR CnOCR 是 Python 3 下的文字识别&#xff08;Optical Character Recognition&#xff0c;简称OCR&#xff09;工具包。 工具包支持简体中文、繁体中文&#xff08;部分模型&#xff09;、英文和数字的常见字符识别&#xff0c;支持竖…

基于Java+SpringBoot+vue实现图书借阅管理系统

基于JavaSpringBootvue实现图书借阅和销售商城一体化系统 &#x1f345; 作者主页 程序设计 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; 文章目录 基于JavaSpringBootvue实现图书借阅和销售商城一体化…

elasticsearch-hadoop.jar 6.8版本编译异常

## 背景 重新编译 elasticsearch-hadoop 包&#xff1b; GitHub - elastic/elasticsearch-hadoop at 6.8 编译 7.17 版本时很正常&#xff0c;注意设置下环境变量就好&#xff0c;JAVA8_HOME/.... 编译 6.8 版本时&#xff08;要求jdk8 / jdk9&#xff09;&#xff0c;出现…