想要精通算法和SQL的成长之路 - 最长回文子串

2023-09-17 13:16:06

想要精通算法和SQL的成长之路 - 最长回文子串

前言

想要精通算法和SQL的成长之路 - 系列导航

一. 最长回文子串

原题链接
在这里插入图片描述

1.1 中心扩散法的运用

这类具有回文性质的题目,我们如果用常规的从左往右或者从右往左的遍历方式,在编码上往往比较麻烦。那不妨,我们以字符串中的每一个字符为起点,同时向左右扩散,判断左右的字符是否相等,即中心扩散法,往往这样更加通俗易懂。编码实现上也更为简单。

  1. 我们从左往右遍历字符串,将每个字符串 s(i) 视为中心,分别向左右扩散。
  2. 先向左扩散,排除掉和中心字符 s(i) 相同字符。判断条件:s(left) == s(i)
  3. 先向右扩散,排除掉和中心字符 s(i) 相同字符。判断条件:s(right) == s(i)
  4. 再同时向左右扩散,判断条件:s(left) == s(right)
public class Test5 {
    public String longestPalindrome(String s) {
    	// 最长回文子串的起始位置
        int maxStart = 0;
        // 左右指针,以及数组长度。maxLen:最长回文子串长度,curLen:当前的回文子串长度
        int left, right, len = s.length(), maxLen = 0, curLen = 1;
        for (int i = 0; i < len; i++) {
            left = i - 1;
            right = i + 1;
            // 向左扩散,去重
            while (left >= 0 && s.charAt(left) == s.charAt(i)) {
                left--;
                curLen++;
            }
            // 向右扩散,去重
            while (right < len && s.charAt(right) == s.charAt(i)) {
                right++;
                curLen++;
            }
            // 同时向左右扩散
            while (left >= 0 && right < len && s.charAt(left) == s.charAt(right)) {
                left--;
                right++;
                curLen += 2;
            }
            // 更新最长回文子串长度和起始位置
            if (curLen > maxLen) {
                maxLen = curLen;
                maxStart = left;
            }
            curLen = 1;
        }
        // 截取字符串, 最长回文子串起始位置 ~ 起始位置+长度
        return s.substring(maxStart + 1, maxStart + maxLen + 1);
    }
}
更多推荐

【配电变电站的最佳位置和容量】基于遗传算法的最优配电变电站放置(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。⛳️座右铭:行百里者,半于九十。📋📋📋本文目录如下:🎁🎁🎁目录💥1概述📚2运行结果🎉3参考文献🌈4Matlab代码实现💥1概述基于遗传算法的最优配电变电站放置为了实现配电变电站

接口测试之文件上传

在日常工作中,经常有上传文件功能的测试场景,因此,本文介绍两种主流编写上传文件接口测试脚本的方法。首先,要知道文件上传的一般原理:客户端根据文件路径读取文件内容,将文件内容转换成二进制文件流的格式传输给服务端,而服务端接受客户端传过来的二进制文件流以及文件名称等信息(此时这些二进制文件流存储在内存中),然后将其写入存储

物联网网络安全:保护物理世界和数字世界的融合

我们正在见证数字技术如何成为我们日常生活和经济系统的一部分,从而提高福利并增强竞争力。尽管如此,新的尖端互联技术的迅速出现和采用也对政府、企业和整个社会构成了重大威胁。长期以来,网络安全威胁一直是电影行业的一个现成的灵感来源,它设想了一些令人担忧的场景,在这些场景中,滥用技术和数据会危及社会、企业和政府。然而,被描绘成

角度回归——角度编码方式

文章目录1.为什么研究角度的编码方式?1.1角度本身具有周期性1.2深度学习的损失函数因为角度本身的周期性,在周期性的点上可能产生很大的Loss,造成训练不稳定1.3那么如何处理边界问题呢:(以θ的边界问题为例)1.3顺时针(CW)1.4逆时针(CCW)2角度回归的方式2.1长边定义法,强制W<H,range范围[-9

如何更好的选择服务器硬盘?

一.选择服务器硬盘时,可以考虑以下几个因素:1.容量需求:首先确定您的服务器对存储容量的需求。评估您预计需要存储的数据量、应用程序和文件的大小,以及未来的扩展需求。确保选择的硬盘能够满足服务器的存储需求,并有足够的空间用于备份和增长。2.性能要求:考虑您的服务器对性能的需求。如果服务器需要处理大量的读写操作、高速数据传

解决@vueup/vue-quill图片上传、视频上传问题

Editor.vue<template><el-upload:action="uploadUrl":before-upload="handleBeforeUpload":on-success="handleUploadSuccess"name="files":on-error="handleUploadError":s

第一章 计算机网络基础

目录1.1网络体系结构1.1.1OSI/RM七层参考模型1.1.2OSI/RM和TCP/IP模型的比较1.1.3五层协议的体系结构1.1.4计算机1向计算机2发送数据过程1.1.5TCP/IP体系结构的具体实现1.2网络设备概述1.2.1互联设备与OSI的对应关系1.2.2集线器(HUB)1.2.3网桥(Bridge)

酷开系统——酷开科技挖掘下沉市场的重要利器

纵观整个互联网的发展历程,我们经历从搜索时代到电子商务时代,再从社交网络时代到近几年兴起的兴趣网络时代。而在当下的兴趣网络时代,面对多元化、同质化的产品,价值文化成为品牌和消费者建立连接的关键。目前,互联网也已进入价值网络时代。而具有强曝光的互联网智能大屏天然是塑造品牌形象、助力品牌与消费者进行文化价值共创的重要载体。

做了五年功能测试麻木了,现在想进阶自动化测试该从哪里开始?

什么是自动化测试?做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadr

云端IDE的技术选型1

背景考虑到以下几点,准备给低代码平台开发一套云端的IDE:桌面端IDE:vscode或idea,都有需要开发人员安装ide,以及配置环境很多时候,配置开发环境是个非常曲折过程,经常出现版本不匹配,即使有文档,也经常出现文档没有及时更新等问题同时,配置环境又是一个完全不产出任何价值的过程希望有一套云端的开发环境,即开即用

windows下mysql的高可用方案

PS:理论上linux下也可以使用这种方案环境准备:首先准备两台电脑,全部安装MySQL,然后分别查看一下ip地址,我的两个ip分别是:192.168.25.134(简称134)192.168.25.135(简称135)配置:my.ini一、配置两个MySQL的my.ini如下:必須卸载mysqld后面134my.in

热文推荐