Java练习—-》求字符串中的最长回文子串

Java练习—-》求字符串中的最长回文子串手贱,做了一道对于我来说挺难的题目嘿嘿!挺有意思的,分享一下文章目录前言一,题目二,思路图形解析代码前言第一次把自己的解题思维写出来,可能写的不太好,请给位原谅,哈哈哈哈额,如果有错的,请各位大佬帮我指出来哈,谢谢!!(^U^)ノ~YO一,题目求一串字符串的最长回文子串,这里以cabacabae为例二,思路图形解析第一步:观察这串字符串—》第二步:找出最长回文子串,并设数—》说明:在这里,假设知道最长回文子串,那这里的resCenter和maxRigth,reslengthgs

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

手贱,做了一道对于我来说挺难的题目
嘿嘿!
挺有意思的,分享一下
请添加图片描述

前言

第一次把自己的解题思维写出来,可能写的不太好,请给位原谅,哈哈哈哈额,如果有错的,请各位大佬帮我指出来哈,谢谢!!(^U^)ノ~YO
请添加图片描述

一,题目

求一串字符串的最长回文子串,这里以cabacabae为例

二,思路图形解析

第一步:观察这串字符串—》
在这里插入图片描述
第二步:找出最长回文子串,并设数—》
在这里插入图片描述
说明:在这里,假设知道最长回文子串,那这里的resCenter和maxRigth,reslengthgs和maxRight都是固定的了,但是实际上我们不知道,所以这里说它是动态的。
第三步:假设我们不知道最长回文子串的情况下—-》
在这里插入图片描述
这里我举了个例子,resCenter是从左到右走的,同样我们可以观察到有对称的j,也就是在一个对称范围内左边和右边是一样的。
所以resCenter有3中情况:
第四步:
在这里插入图片描述
在这一步,只是知道resLength的范围内部分,其他不在这范围内的我们不知道,所以只能一步一步对比

第五步:
在这里插入图片描述
此时左边的resCenter和j的resLength相等,为1.
第六步:
在这里插入图片描述
可以看出此时的resCenter到最左边界的长度为6,设下标为1的元素为x,下标为9的元素为y,此时数组b中的b[x]==b[y],设下表为17的元素为z,那么从上面几种情况判断以及j的位置,有b[x]!= b[z],所以b[y]!=b[z]。

注意:上面图中的resCenter的痕迹和j的痕迹是一致的,我这样比较好看出来两者的对称关系。所以,这里设出来的所有参数的每次移动的位置只有一个,j只是我画比较好理解的,,不要理解错了哈!嘻嘻~~
你也可以理解为一根绳子,找到对称点,阶段之后,再找对称点,从对称点(每一点都可以理解为对称点)开始,对比对称点前后是否是一样的,一样的则继续,遇到粗细不一样的就停止,这就相当于一个回文,记录下来,然后又继续…直到到最后一个。
所以这里需要重头开始,那时间复杂度就是o(n),空间复杂度就是o(1)。
(不想改图了,那个resLength的长度是动态的,因为在这之前我们是不知道最长回文子串的,但是我们可以假设,上面图没有交代,哈哈哈额)

代码

所以,根据上面的分析,我们如果限定了maxRigth和j的位置,那不就可以分析各种情况了嘛!因为maxRigth和j的范围不同,其他的也会不同,所以有以下代码—-》
在这里插入图片描述

在这里插入图片描述
重点部分分析:假设我们知道了最长的回文子串,那么resCenter则确定了,resLength也就确定了,同样maxRigth和maxCenter也确定了。那么在没确定之前,我们可以观察到在待定的最长回文子串中,resCenter的变化和j的变化是一样的,那我们可以用j来表示,其实resCenter 向后走的时候,也就是j。所以我们可以在j到maxRigth之内找到其元素的回文。那么在maxRigth之外的,我们有所不知,需要一个一个的去配对,同时在这里我们需要注意数组越界问题,所以要限定边界。在最左边界为j-c[j],肯定要大于等于0;最右边界为j+c[j]【这里的数组c[j]表示的是b[i]为中心的回文子串的半径】,就要小于length,同时因为在整个字符数组都左右的最后一个元素都是“#”,所以最左边界的值和最右边界的值是相等的,这个一定要限定!!。如果右边界越界了,那就更新一下maxRigth和maxCenter就可以了。
写代码的方式有很多种,也可以不这样写
ヽ( ̄ω ̄( ̄ω ̄〃)ゝ
请添加图片描述

应该就这样了吧,不知道有没有表达清楚( ´・・)ノ(._.`),不知道在哪里做动图,额,,你们知道在哪里弄动图的,可以告诉我一声哈,我啥也不会,哈哈哈哈额?
那就这样吧。。
请添加图片描述
先不要走哈,留下三连嘛!!嘻嘻

请添加图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/181197.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • [安全]DDOS攻击又来 用户应该勇敢面对

    [安全]DDOS攻击又来 用户应该勇敢面对

    2021年9月11日
    91
  • Android 蓝牙开发之搜索、配对、连接、通信大全

    Android 蓝牙开发之搜索、配对、连接、通信大全关注微信公众号(文强的技术小屋),学习更多技术知识,一起遨游知识海洋~蓝牙(Bluetooth®):是一种无线技术标准,可实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换(使用2.4—2.485GHz的ISM波段的UHF无线电波)。蓝牙设备最多可以同时和7个其它蓝牙设备建立连接,进行通信,当然并不是每一个蓝牙都可以达到最大值。下面,我们从蓝牙的基本概念…

    2022年6月15日
    41
  • open函数详解与close函数详解

    open函数详解与close函数详解open()头文件:#include<fcntl.h>//在centos6.0中只要此头文件就可以#include<sys/types.h>#incldue<sys/stat.h>功能:打开和创建文件(建立一个文件描述符,其他的函数可以通过文件描述符对指定文件进行读取与写入的操作。)原型into…

    2022年5月26日
    117
  • Java程序设计(基础)- 方法「建议收藏」

    Java程序设计(基础)- 方法「建议收藏」Java程序设计(基础)- 方法

    2022年4月22日
    43
  • ajax的实现_JavaScript高级教程

    ajax的实现_JavaScript高级教程点击这里下载PDF文件。  点击这里下载示例文件。  点击这里下载视频文件。  相关内容:AJAX培训第二讲:使用AJAX框架(下)  首先向大家说声抱歉,离上次隔的时间实在太长。由于一度工作比较忙,所以录制就耽搁了。而且后来在录制过程中也麻烦不断,主要原因是我的笔记本比较差,而录制的内容一多,几乎就会处于“僵死”状态,然后Captivate非常容易崩溃,最后连录制内容都弄坏了。录制结束后怎么发布

    2022年9月11日
    0
  • pycharm 环境变量设置_pycharm插件获取环境变量

    pycharm 环境变量设置_pycharm插件获取环境变量https://www.cnblogs.com/TF511/articles/10938361.html

    2022年8月27日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号