题目

题解:中心扩展法


描述:遍历,从左到右遍历,然后向两端扩展

假设每个字符都是回文串最中心的字符,从中心字符向两边扩展,若左右字符不同则他就不会是回文串。

回文字符串需要分情况考虑,分奇偶两种情况,为奇数是i==i,然后向两边扩展,当为偶数时,先判断 i ==i+1 字符是否一样,一样则向两边扩展,否则他就不可能是回文串。

最后回文长度就是right - left -1,这个可以举两个例子

下面第一个是返回最长回文的长度,第二个是返回最长回文
下面也可以不打印成数组,用s.charAt()

import java.util.*;public class Solution {public int getLongestPalindrome(String A, int n) {if(A == null || n == 0){return 0;}//中心扩展法:某个字符向两边扩展char[] ch = A.toCharArray();int maxLen = 0;//最大长度for(int i = 0 ; i < ch.length ; i++){//回文子串长度为奇数int oddLen = LongestPalindrome(ch,i,i);//回文子串长度为偶数int evenLen = LongestPalindrome(ch,i,i+1);int curMaxLen = Math.max(oddLen,evenLen);//比较是否比之前的最大值还大,是则更新if(curMaxLen > maxLen){maxLen = curMaxLen;}}return maxLen;}private int LongestPalindrome(char[] ch,int left,int right){while(left >= 0 && right < ch.length && ch[left] == ch[right]){//向两边扩展left--;right++;}return right - left - 1;//回文长度}
}


若求回文字符串,则如下

public class Solution {public String getLongestPalindrome(String A, int n) {if(A == null || n == 0){return "";}//中心扩展法:某个字符向两边扩展char[] ch = A.toCharArray();int start = 0, end = 0;for(int i = 0 ; i < ch.length ; i++){//回文子串长度为奇数int oddLen = LongestPalindrome(ch,i,i);//回文子串长度为偶数int evenLen = LongestPalindrome(ch,i,i+1);int len = Math.max(oddLen,evenLen);if(len > end - start){start = i - (len - 1)/2;end = i + len/2;}}// 注意:这里的end+1是因为 java自带的左闭右开的原因return s.substring(start,end + 1);;}private int LongestPalindrome(char[] ch,int left,int right){while(left >= 0 && right < ch.length && ch[left] == ch[right]){//向两边扩展left--;right++;}return right - left - 1;//回文长度}
}

牛客Top200---最长回文字符串(java)相关推荐

  1. 牛客题霸 [判断回文] C++题解/答案

    牛客题霸 [判断回文] C++题解/答案 题目描述 给定一个字符串,请编写一个函数判断该字符串是否回文.如果回文请返回true,否则返回false. 题解: 左右两端同时向中间缩 代码: class ...

  2. 最长回文字符串——马拉车(Manacher)算法

    最长回文字符串--马拉车(Manacher)算法 说来惭愧,都快要毕业了才写第一篇博客... 回文串 回文串呢,就是在一个字符串中,左半部分和右半部分是镜像对称的字符串,比如abcba,就是一个已c为 ...

  3. leetCode第五题-求字符串最长回文字符串

    原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...

  4. 牛客每日练习----合并回文串,年轮广场,安卓图案解锁

    大提琴的声音就像一条河,左岸是我无法忘却的回忆,右岸是我值得紧握的璀璨年华,中间流淌的,是我年年岁岁淡淡的感伤. 链接:https://ac.nowcoder.com/acm/problem/1323 ...

  5. leetcode_最长回文字符串

    题目:Given a string s, find the longest palindromic substring in s. You may assume that the maximum le ...

  6. jsp判断字符串相等_最长回文字符串三种解法

    先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...

  7. Java Longest Palindromic Substring(最长回文字符串)

    假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...

  8. 牛客 - 小A的回文串(Manacher模板题)

    题目链接:点击查看 题目大意:给出一个字符串s,现在可以对字符串进行一次操作,具体规则是可以将字符串的一个前缀在不改变顺序的情况下变为其后缀,问如何操作可以使得最长回文子串的长度尽可能长,题目要求输出 ...

  9. 转载-----Java Longest Palindromic Substring(最长回文字符串)

    转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...

  10. [转]最长回文字符串

    最长回文串 输入一个字符串,求出其中最长的回文字串.字串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如aabb和yyxyy,字判断时,应该忽略所有标点符号和空格,且忽略大 ...

最新文章

  1. Cannot resolve method 'getParameter( )'
  2. mysql buffer size_优化mysql之key_buffer_size设置
  3. 设置作者_阿里Java开发手册建议创建HashMap时设置初始化容量,但多少合适
  4. vb调用excel方法详解及操作相关操作命令大全
  5. 强化学习(四)—— Actor-Critic
  6. linux的终端,网络虚拟终端,伪终端
  7. win7 计算机库 桌面,【备忘】win7下再硬盘安装win7(桌面库和家庭组图标删除)...
  8. word2vec介绍
  9. java 雅思_基于JAVA的雅思考试管理系统的设计与实现(SSH,MySQL)(含录像)
  10. 搜索引擎关键词劫持之php篇(源码与分析)
  11. 那个回乡创业的年轻人,终于断了再回京的念头
  12. 国际服登陆显示服务器维护中,国际服显示服务器在维护中怎么办 教你一招解决服务器维护中什么意思...
  13. EN300328测试软件,蓝牙耳机EN300328测试项目。
  14. 了解Java的反射机制
  15. 费曼技巧在学习中的应用
  16. 编写一个静态方法lg(),接收一个整型参数N,返回不大于log2N(以2为底)的最大整数。不要使用Math库。
  17. Docker Compose 安装
  18. HTML3-视频图像的插入
  19. 三菱梯形图转换c语言软件,三菱梯形图转51单片机软件使用程序超过100步又要使用软件的朋友.pdf...
  20. Unity VR开发教程 OpenXR+XR Interaction Toolkit (三) 转向和移动

热门文章

  1. 基于proteus的CPU控制器设计(微程序版)
  2. DNS反劫持的几种方式
  3. 企业微信API全局错误码 enum枚举类
  4. Python工具箱系列(十一)
  5. 安徽大学836数字电路与逻辑设计考研历年真题库资料
  6. java debug命令详解_DEBUG命令使用解析及范例大全
  7. Java学习需要多长时间?
  8. selenium超详解
  9. mtk android可修改imei,MTK android 可修改IMEI方法
  10. Java课程设计 商品管理系统