22 最长回文子串的3中解决方式

问题描述:给你一个字符串s,找到s中最长的回文子串

暴力求解:通过两个循环遍历所有的子串,找到最长的那个子串并进行记录后返回

Boolean isPalindrome(String s,int indexStart,int indexEnd)
{
if(indexStart==indexEnd)
{
return true;
}
int start=indexStart;
int end=indexEnd;
while(end>start)
{
if(s.charAt(end)!=s.charAt(start))
{
return false;
}
}
​​​​​​​return true;
}public String maxLengthSubString(String s)
{
int start=0;
int end=0;
int max=Integer.MIN_VALUE;
for(int i=0;i<s.length();i++)
{
for(int j=i;j<s.length;j++)
{
if(isPalindrome(s,i,j))
{
if((j-i+1)>max)
{
start=i;
end=j;
max=Math.max((j-i+1),max);
}
}
}
}
return s.substring(start,end+1);
}

动态规划求解:定义dp[i][j]为以[i,j]为头尾的字符串是否为回文子串,如果s.charAt(i)==s.charAt(j)则dp[i][j]=dp[i-1][j-1](需要考虑j-i=1的情况)

public String maxPalindrome(String s)
{
Boolean[][]dp=new Boolean[s.length()][s.length()];
dp[0][0]=1;
int start;
int end;
int max=Integer.MIN_VALUE;
for(int i=1;i<s.length();i++)
{
for(int j=i-1;j>0;j--)
{
if(s.charAt(i)==s.charAt(j))
{
if(j-i==1)
{
dp[i][j]=true;
if(dp[i][j]>max)
{
max=Math.max(j-i+1,max);
start=i;
end=j;
}
}else
{
dp[i][j]=dp[i-1][j-1];
if(dp[i][j]>max)
{
max=Math.max(j-i+1,max);
start=i;
​​​​​​​end=j;
}
}
}
}
}
return s.substring(i,j+1);
}

中心扩散法求解:对于每个元素都可以以其为中心点进行寻找,还有一种情况是偶数,需要判断前一个字符与其是否相等,从而进行偶数的判断;

private int isOddPalindrome(String s,int index)
{
int left=index-1;
int right=index+1;
int count=1;
while(left>=0&&right<s.length())
{
if(s.charAt(left)==s.charAt(right))
{
count++;
}
}
return count;
}
private int isEvenPalindrome(String s,int index)
{
int count=2;
int left=index-2;
int right=index+1;
while(left>-0&&right<s.length())
{
if(s.charAt(left)==s.charAt(right))
{
count++;
}
}
​​​​​​​return count;
}public String maxPalindrome(String s)
{
int max=1;
int start=0;
int end=0;
for(int i=0;i<s.length;i++)
{
int Ocount=isOddPalindrome(s,i);
if(Ocount>max)
{
max=Ocount;
start=i-Ocount>>1;
end=i+Ocount>>1;
}
if(s.charAt(i)==s.charAt(i-1))
{
int Ecount=isEvenPalindrome(s,i);
if(Ecount>max)
{
max=Ecount;
start=i-Ecount>>1;
end=i+Ecount>>1-1;
}
}
}
return s.substring(start,end+1);
}

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

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

相关文章

使用 TypeChain 从智能合约 ABI 生成类型声明

前言 web3 项目中&#xff0c;前端不可缺少地需要调用智能合约的代码&#xff0c;但是智能合约只有合约地址及对应的 ABI 文档&#xff0c;而没有相应的 typescript 类型声明。本文讲述如何使用 typechain 将智能合约的 ABI 文件自动生成类型声明&#xff0c;这样可以在项目中…

分布式ID服务实践

背景 分布式场景下需要一个全局 ID 来标识唯一性&#xff0c;比如在单数据库时通过表唯一主键即可实现唯一 ID&#xff0c;分库分表时就需要全局唯一 ID。 业务对唯一 ID 的要求如下&#xff1a; 全局唯一性 不能出现重复的 ID 号&#xff0c;既然是唯一标识&#xff0c;这…

Ubuntu22.04LTS配置rsync服务

Ubuntu22.04LTS配置rsync服务 近期准备同步一些文件&#xff0c;准备选用rsync&#xff0c;这里记录一下配置过程。 rsync是一个开源的快速备份工具&#xff0c;可以镜像保存整个目录树和文件系统。 rsync使用所谓的“rsync算法”来使本地和远程的文件保持同步。这个算法只传…

Kubernetes(K8s)安全认证-10

安全认证 访问控制概述 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。所谓的安全性其实就是保证对Kubernetes的各种客户端进行认证和鉴权操作。 客户端 在Kubernetes集群中&#xff0c;客户端通常有两类&#xff1a; User Acco…

线程池,及7大参数,4大拒绝策略详解

线程池&#xff0c;及7大参数&#xff0c;4大拒绝策略详解 1. 前言 1.1 什么是线程池&#xff1f; 线程池是一种利用池化技术思想来实现的线程管理技术&#xff0c;主要是为了复用线程、便利地管理线程和任务、并将线程的创建和任务的执行解耦开来。我们可以创建线程池来复用…

基于模块化的智能变电站电气系统

摘要 本次设计是我们的毕业设计,本次设计的变电站的类型为地区变电站&#xff0c;是为了满足市区生产和生活的要求&#xff0c;根据老师给出的设计资料和要求&#xff0c;结合所学的基础知识和文献资料所做的。通过本设计&#xff0c;对以前所学的知识加强了理解和掌握&#x…

第19章 正则表达式 - C++

第19.1节 介绍 正则表达式库提供表示正则表达式的类&#xff0c;正则表达式是一种用于在字符串中匹配模式的微型语言。下列数种对象上的操作能刻画几乎所有带正则表达式的操作&#xff1a; 目标序列。为模式而搜索到的字符序列。这可以是二个迭代器所指定的范围、空终止字符串…

【4】密评-网络和通信安全测评

0x01 依据 GB/T 39786 -2021《 信息安全技术 信息系统密码应用基本要求》针对等保三级系统要求&#xff1a; 网络和通信层面&#xff1a; a&#xff09;应采用密码技术对通信实体进行身份鉴别&#xff0c;保证通信实体身份的真实性&#xff1b; b&#xff09;宜采用密码…

Java实现微信小程序支付前后端

微信小程序支付的前后端实现可以分为以下几个步骤&#xff1a; 微信开放平台注册账号并创建小程序应用。 在小程序后台设置支付相关信息&#xff0c;包括支付证书、支付回调地址等。 在小程序前端页面中调用wx.requestPayment函数&#xff0c;调起微信支付界面。 在小程序后…

GB/T 35379-2017 木门分类和通用技术要求

木门是指主要采用实木、人造板或其他木质复合材料制成的门框和门扇&#xff0c;根据表面材料的不同分为实木门&#xff0c;实木复合门和木质复合门&#xff0c;按照功能的不同分为防火木门、防盗木门、防潮木门、隔声木门等。 GB/T 35379-2017 木门检测项目 测试项目 测试标准…

【数电笔记】07-基本和复合逻辑运算

目录 说明&#xff1a; 基本逻辑运算 1. 与运算 &#xff08;and gate&#xff09; 2. 或运算 &#xff08;or gate&#xff09; 3. 非运算 &#xff08;not gate &#xff09; 复合逻辑运算 1. 与非运算&#xff08;nand&#xff09; 2. 或非运算&#xff08;nor&…

提高你的 Python 编程技巧:10个实用技巧

在日常的 Python 编程工作中&#xff0c;掌握一些实用的技巧可以提高你的效率和代码质量。本文将介绍 10 个实用的 Python 技巧&#xff0c;帮助你更好地利用 Python 进行开发。 1. enumerate 在循环中&#xff0c;有时我们需要同时获取元素的索引和值。这时可以使用 enumera…

用 taichi 写个软渲染器

用 taichi 写个软渲染器 What 起点是&#xff1a;可以 setup 一个画布&#xff0c;drawPixel(x, y, color)&#xff0c;然后渲染到 GUI 或者 .png目标是&#xff1a;加载 obj 模型文件和 .tga 贴图文件&#xff0c;并渲染出来使用 taichi 作为 SIMD 加速 backend复现一些 RTR…

leetcode:统计感冒序列的数目【数学题:组合数含逆元模版】

1. 题目截图 2.题目分析 需要把其分为多个段进行填充 长为k的段&#xff0c;从两端往中间填充的方案数有2 ** (k - 1)种 组合数就是选哪几个数填哪几个段即可 3.组合数含逆元模版 MOD 1_000_000_007 MX 100_000# 组合数模板 fac [0] * MX fac[0] 1 for i in range(1, MX…

伯俊软件CTO陈雨陆:R3全渠道业务中台的OceanBase落地实践

11 月 16 日&#xff0c;OceanBase 在京顺利举办 2023 年度发布会&#xff0c;正式宣布&#xff1a;将持续践行“一体化”产品战略&#xff0c;为关键业务负载打造一体化数据库。其中&#xff0c;“数字化转型升级实践专场”我们有幸邀请到伯俊软件 CTO 陈雨陆进行《OceanBase …

从Intel Cyclone10GX TransceiverPHY 高速收发器认识ATX PLL、FPLL、CMU PLL等PLL

文章目录 前言一、pandas是什么&#xff1f;二、使用步骤 1.引入库2.读入数据总结 前言 在使用Intel Cyclone10GX TransceiverPHY的过程中发现这个IP还是比较复杂的&#xff0c;特别是时钟系统&#xff0c;提到了多种PLL:ATX PLL、FPLL、CMU PLL&#xff0c;这里进行一下扩展学…

LoadBalancer将服务暴露到外部实现负载均衡metallb-layer2模式配置介绍

目录 一.metallb简介 1.支持多种负载均衡协议 2.支持自定义 IP 地址范围 3.无需额外的硬件设备 4.易于安装和配置 5.可扩展性强 6.layer2模式下选举的leader节点压力大 二.layer2模式配置演示 1.开启ipvs并开启严格ARP模式 2.下载并应用metallb 3.创建一个 IPAddres…

用友U8 Cloud RegisterServlet SQL注入漏洞复现

0x01 产品简介 用友U8 Cloud是用友推出的新一代云ERP,主要聚焦成长型、创新型企业,提供企业级云ERP整体解决方案。 0x02 漏洞概述 用友U8 Cloud RegisterServlet接口处存在SQL注入漏洞,未授权的攻击者可通过此漏洞获取数据库权限,从而盗取用户数据,造成用户信息泄露。 …

2023年甘肃省职业院校技能大赛(中职教师组)网络安全竞赛样题(四)

2023年甘肃省职业院校技能大赛&#xff08;中职教师组&#xff09; 网络安全竞赛样题&#xff08;四&#xff09; &#xff08;总分1000分&#xff09; 目录 模块A 基础设施设置与安全加固 A-1任务一 登录安全加固&#xff08;Windows&#xff09; A-2任务二 本地安全策略…

搭建React项目,基于Vite+React+TS+ESLint+Prettier+Husky+Commitlint

基于ViteReactTSESLintPrettierHuskyCommitlint搭建React项目 node: 20.10.0 一、创建项目 安装包管理器pnpm npm i pnpm -g基于Vite创建项目 pnpm create vitelatest web-gis-react --template react-ts进入项目目录安装依赖 $ cd web-gis-react $ pnpm i启动项目 $ pnpm…