算法--最长回文子串--java--python
这个算法题里面总是有
暴力解法
把所有字串都拿出来判断一下
这里有小小的优化:
- 就是当判断的字串小于等于我们自己求得的最长回文子串的长度,那么我们就不需要在进行对这个的判断
- 这里的begin,还可以用来取得最小回文子串是什么
java
// 暴力解法最长回文子串public static int longestPalindrome(String s) {int len = s.length();if (s.length() < 2)return len;int maxLen = 1;int begin = 0;char[] chars = s.toCharArray();for (int i = 0; i < len; i++) {for (int j = i + 1; j < len; j++) {if (validPalindromic(chars, i, j))maxLen = Math.max(maxLen, j - i + 1);begin = i;}}return maxLen;}// 验证子串 s[left..right] 是否为回文串private static boolean validPalindromic(char[] chars, int left, int right) {while (left < right) {if (chars[left] != chars[right]) {return false;}left++;right--;}return true;}
python
def longestPalindrome(s: str) -> int:if len(s) < 2:return len(s)maxLen = 0for i in range(len(s)):for j in range(i+1, len(s)):if maxLen < j - i + 1 and s[i:j] == s[j:i:-1]:maxLen = j-i+1return maxLens = input()
print(longestPalindrome(s))
中心扩散法
以某数或者某2个数为中心进行扩散判断
// 中心扩散法最长回文子串public static int longestPalindrome2(String s) {int len = s.length();if (s.length() < 2)return len;int maxLen = 1;char[] chars = s.toCharArray();for (int i = 0; i < len; i++) {maxLen = Math.max(maxLen, expandAroundCenter(chars, i, i));maxLen = Math.max(maxLen, expandAroundCenter(chars, i, i + 1));}return maxLen;}private static int expandAroundCenter(char[] charArray, int left, int right) {while (left >= 0 && right < charArray.length && charArray[left] == charArray[right]) {left--;right++;}return right - left -1;}
python
# 中心扩展法
def longestPalindrome(s: str) -> int:if len(s) < 2:return len(s)maxLen = 0for i in range(len(s)):maxLen = max(maxLen, expand(s, i, i))maxLen = max(maxLen, expand(s, i, i+1))return maxLendef expand(s: str, left: int, right: int) -> int:while left >= 0 and right < len(s) and s[left] == s[right]:left -= 1right += 1return right - left - 1s = input()
print(longestPalindrome(s))
manacher算法
这个算法
| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| a | a | b | b | a | a |
首先得知道几点:
- 解决对称中心是数还是数中间。
我们可以在每一个中间插入一个#,用#来代表2个数的中间,就统一了起来。
| 1 | 2 | 3 | 4 | 5 | 6 |
|---|---|---|---|---|---|
| #a | #a | #b | #b | #a | #a# |
- 算法我觉得是在中心扩展的衍生
先通过中心扩展找到前几个最大的dp,然后通过已经求得的dp优化需要求得的数。
为了实现这个需要维护几个变量。已经求得的能够到最右边的回文子串的最右数、对称中心。- 对称中心左右的在圈内的dp应该是一样的。
- 如到7的时候可以得到最右为13中心为7.
- 求dp【10】的时候由于对称其,圈内的dp【10】=dp【4】=1
- 如果这个dp大于右边界,我们是不能确定的,所以最大只能取右边界。然后在扩展
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| # | a | # | a | # | b | # | b | # | a | # | a | $ |
在求新数的时候,如果这个数在这个最右子串里面,
// manacher算法最长回文子串public static int longestPalindrome(String s) {if (s.length() < 2)return s.length();// 预处理StringBuilder sb = new StringBuilder();sb.append("@#");for (int i = 0; i < s.length(); i++) {sb.append(s.charAt(i));sb.append('#');}sb.append("#$");char[] chars = sb.toString().toCharArray();int len = chars.length;int[] dp = new int[len];int maxCenter = 0, maxRight = 0, maxLen = 0;for (int i = 1; i < len - 1; i++) {dp[i] = maxRight > i ? Math.min(dp[2 * maxCenter - i], maxRight - i) : 1;while (chars[i + dp[i]] == chars[i - dp[i]])dp[i]++;if (maxRight < i + dp[i]) {maxRight = i + dp[i];maxCenter = i;}maxLen = Math.max(maxLen, dp[i]);}return maxLen - 1;}
# manacher算法
def longestPalindrome(s: str) -> int:if len(s) < 2:return len(s)s = "@#" + '#'.join(s) + "#$" # 预处理maxLen = 0maxRight = 0maxCenter = 0p = [0] * len(s)for i in range(1,len(s)-1):if i < maxRight:p[i] = min(p[2 * maxCenter - i], maxRight - i)else:p[i] = 1# 不懂为什么这个不加前面的条件就通不过while i-p[i] > 0 and i+p[i] < len(s)-1 and s[i-p[i]] == s[i+p[i]]:p[i] += 1if i + p[i] > maxRight:maxRight = i + p[i]maxCeaanter = imaxLen = max(maxLen, p[i])return maxLen - 1相关文章:
算法--最长回文子串--java--python
这个算法题里面总是有 暴力解法 把所有字串都拿出来判断一下 这里有小小的优化: 就是当判断的字串小于等于我们自己求得的最长回文子串的长度,那么我们就不需要在进行对这个的判断这里的begin,还可以用来取得最小回文子串是什么 java // 暴…...
ElasticSearch-第二天
目录 文档批量操作 批量获取文档数据 批量操作文档数据 DSL语言高级查询 DSL概述 无查询条件 叶子条件查询 模糊匹配 match的复杂用法 精确匹配 组合条件查询(多条件查询) 连接查询(多文档合并查询) 查询DSL和过滤DSL 区别 query DSL filter DSL Query方式查…...
【AI大比拼】文心一言 VS ChatGPT-4
摘要:本文将对比分析两款知名的 AI 对话引擎:文心一言和 OpenAI 的 ChatGPT,通过实际案例让大家对这两款对话引擎有更深入的了解,以便大家选择合适的 AI 对话引擎。 亲爱的 CSDN 朋友们,大家好!近年来&…...
美团笔试-3.18
1、捕获敌人 小美在玩一项游戏。该游戏的目标是尽可能抓获敌人。 敌人的位置将被一个二维坐标 (x, y) 所描述。 小美有一个全屏技能,该技能能一次性将若干敌人一次性捕获。 捕获的敌人之间的横坐标的最大差值不能大于A,纵坐标的最大差值不能大于B。 现在…...
【12】SCI易中期刊推荐——计算机信息系统(中科院4区)
🚀🚀🚀NEW!!!SCI易中期刊推荐栏目来啦 ~ 📚🍀 SCI即《科学引文索引》(Science Citation Index, SCI),是1961年由美国科学信息研究所(Institute for Scientific Information, ISI)创办的文献检索工具,创始人是美国著名情报专家尤金加菲尔德(Eugene Garfield…...
好不容易约来了一位程序员来面试,结果人家不做笔试题
感觉以后还是不要出面试题这环节好了。好不容易约来了一位程序员来面试。刚递给他一份笔试题,他一看到要做笔试题,说不做笔试题,有问题面谈就好了,搞得我有点尴尬,这位应聘者有3年多工作经验。关于程序员岗位ÿ…...
这几个过时Java技术不要再学了
Java 已经发展了近20年,极其丰富的周边框架打造了一个繁荣稳固的生态圈。 Java现在不仅仅是一门语言,而且还是一整个生态体系,实在是太庞大了,从诞生到现在,有无数的技术在不断的推出,也有很多技术在不断的…...
EEPROM芯片(24c02)使用详解(I2C通信时序分析、操作源码分析、原理图分析)
1、前言 (1)本文主要是通过24c02芯片来讲解I2C接口的EEPROM操作方法,包含底层时序和读写的代码; (2)大部分代码是EEPROM芯片通用的,但是其中关于某些时间的要求,是和具体芯片相关的,和主控芯片和外设芯片都有关系&…...
Django4.0新特性-主要变化
Django 4.0于2021年12月正式发布,标志着Django 4.X时代的来临。参考Django 4.0 release notes | Django documentation | Django Python 兼容性 Django 4.0 将支持 Python 3.8、3.9 与 3.10。强烈推荐并且仅官方支持每个系列的最新版本。 Django 3.2.x 系列是最后…...
MySQL高级面试题整理
1. 执行流程 mysql客户端先与服务器建立连接Sql语句通过解析器形成解析树再通过预处理器形成新解析树,检查解析树是否合法通过查询优化器将其转换成执行计划,优化器找到最适合的执行计划执行器执行sql 2. MYISAM和InNoDB的区别 MYISAM:不支…...
【Java】面向对象三大基本特征
【Java】面向对象三大基本特征 1.封装 On Java 8:研发程序员开发一个工具类,该工具类仅向应用程序员公开必要的内容,并隐藏内部实现的细节。这样可以有效地避免该工具类被错误的使用和更改,从而减少程序出错的可能。彼此职责划分清晰&#x…...
蓝桥杯C++组怒刷50道真题(填空题)
🌼深夜伤感网抑云 - 南辰Music/御小兮 - 单曲 - 网易云音乐 🌼多年后再见你 - 乔洋/周林枫 - 单曲 - 网易云音乐 18~22年真题,50题才停更,课业繁忙,有空就更,2023/3/18/23:01写下 目录 👊填…...
Shell自动化管理 for ORACLE DBA
1.自动收集每天早上9点到晚上8点之间的AWR报告。 auto_awr.sh #!/bin/bash# Set variables ORACLE_HOME/u01/app/oracle/product/12.1.0/dbhome_1 ORACLE_SIDorcl AWR_DIR/home/oracle/AWR# Set date format for file naming DATE$(date %Y%m%d%H%M%S)# Check current time - …...
Unity学习日记13(画布相关)
目录 创建画布 对画布的目标图片进行射线检测 拉锚点 UI文本框使用 按钮 按钮导航 按钮触发事件 输入框 实现单选框 下拉菜单 多选框选项加图片 创建画布 渲染模式 第一个,保持画布在最前方,画布内的内容显示优先级最高。 第二个,…...
初阶C语言:冒泡排序
冒泡排序是一种简单的排序算法,它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。1.冒泡排序关于冒泡排序我们在讲…...
带头双向循环链表
在前面我们学习了单链表,发现单链表还是有一些不够方便,比如我们要尾插,需要遍历一遍然后找到它的尾,这样时间复炸度就为O(N),现在我们引入双向带头链表就很方便了,我们先看看它的结构。通过观察,我们发现一…...
C#中的DataGridView中添加按钮并操作数据
背景:最近在项目中有需求需要在DataGridView中添加“删除”、“修改”按钮,用来对数据的操作以及显示。 在DataGridView中显示需要的按钮 首先在DataGridView中添加需要的列,此列是用来存放按钮的。 然后在代码中“画”按钮。 if (e.Column…...
WEB安全 PHP基础
WEB安全 PHP基础 PHP简述 PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。 在一个php文件中可以包括以下内容: PHP 文件可包含文本、HTML、…...
基础篇:07-Nacos注册中心
1.Nacos安装部署 1.1 下载安装 nacos官网提供了安装部署教程,其下载链接指向github官网,选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包:📎nacos-server-2.1.0.zip,后续我们也可能会更改为其他版本做更…...
端口镜像讲解
目录 端口类型 镜像方向 观察端口位置 端口镜像实现方式 流镜像 Vlan镜像 MAC镜像 配置端口镜像 配置本地观察端口 配置远程流镜像(基于流镜像) 端口镜像是指将经过指定端口的报文复制一份到另一个指定端口,便于业务监控和故障定位…...
弧形导轨精度等级适配策略
弧形导轨是用于实现曲线运动的线性导向装置,广泛应用于自动化设备、机器人、医疗机械等领域。弧形导轨作为机械传动中的核心部件,其精度等级直接影响设备性能与稳定性。从精密加工到重型机械,不同场景对导轨的制造精度、运行精度及耐磨性要求…...
Windows/Mac双平台实测:FORCE PRO 6.3.0求解器从注册到下载的完整配置流程
Windows/Mac双平台实测:FORCE PRO 6.3.0求解器从注册到下载的完整配置流程 在工程优化与控制领域,FORCE PRO求解器凭借其高效的数值计算能力和灵活的接口设计,已成为众多开发者的首选工具。最新发布的6.3.0版本在算法效率和平台兼容性上都有…...
拯救变砖的STM32:利用BOOT0/1组合实现三种烧录救机方案(含串口/JTAG异常处理)
STM32紧急救援指南:BOOT引脚组合的三种烧录方案与异常处理实战 引言:当STM32突然"变砖"时 深夜的实验室里,王工盯着眼前毫无反应的STM32开发板,额头渗出细密的汗珠——距离项目交付只剩12小时,核心控制程序却…...
手把手教你解决HarmonyOS项目中的hvigor版本冲突问题(含API8/9兼容方案)
HarmonyOS开发实战:彻底解决hvigor版本冲突与API兼容性问题 上周团队新来的工程师小王在调试P40设备时突然惊呼:"这报错太诡异了!明明代码没问题,为什么安装包死活装不上?"我凑近一看,控制台正显…...
OrigamiSimulator:3分钟上手实时折纸模拟的完整指南
OrigamiSimulator:3分钟上手实时折纸模拟的完整指南 【免费下载链接】OrigamiSimulator Realtime WebGL origami simulator 项目地址: https://gitcode.com/gh_mirrors/or/OrigamiSimulator 你是否曾经好奇复杂的折纸结构是如何从平面纸张变为立体形态的&…...
赋能音乐自由:Unlock Music技术解密与全场景应用指南
赋能音乐自由:Unlock Music技术解密与全场景应用指南 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库: 1. https://github.com/unlock-music/unlock-music ;2. https://git.unlock-music.dev/um/web 项目地址: https:…...
音乐标签编辑器:让本地音乐元数据管理效率提升90%的开源工具
音乐标签编辑器:让本地音乐元数据管理效率提升90%的开源工具 【免费下载链接】music-tag-web 音乐标签编辑器,可编辑本地音乐文件的元数据(Editable local music file metadata.) 项目地址: https://gitcode.com/gh_mirrors/mu/…...
实战指南:为spring boot项目快速配置最优jdk环境,助力应用高效部署
最近在准备一个Spring Boot项目时,发现JDK环境配置这个看似简单的环节其实藏着不少学问。特别是当项目需要兼顾开发效率和生产环境稳定性时,合理的JDK配置方案就显得尤为重要。今天就来分享下我的实战经验,以及如何利用工具快速搞定这些配置。…...
Phi-4-reasoning-vision-15B多场景落地:OCR/图表分析/GUI理解三类任务统一部署
Phi-4-reasoning-vision-15B多场景落地:OCR/图表分析/GUI理解三类任务统一部署 1. 模型介绍 Phi-4-reasoning-vision-15B是微软推出的视觉多模态推理模型,能够处理多种视觉理解任务。这个模型特别擅长从图像中提取和理解信息,无论是文档文字…...
某循环流化床锅炉设计【论文+ CAD图纸+翻译】
循环流化床锅炉作为高效清洁燃烧技术的代表,其设计需兼顾热效率、污染物控制与运行稳定性。论文部分通过系统分析流体力学、传热学及燃烧学原理,构建了锅炉本体结构、受热面布置与气固两相流场优化的理论模型。针对不同煤种特性,重点探讨了循…...
