美文网首页
最长回文子串

最长回文子串

作者: Michaelhbjian | 来源:发表于2019-06-24 11:21 被阅读0次

回文串是一个正读和反读都一样的字符串,比如level或者noon等等就是回文串。

5.最长回文子串

题目:

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

示例1:

输入: "babad"
输出: "bab"
注意: "aba"也是一个有效答案。

示例2:

输入: "cbbd"
输出: "bb"

解题思想:

  • 主要分两种情况:奇数或者是偶数来判断。比如在第二个位置a处:

  • 1、首先假设以奇数开始,以a为中心点,向两边扩展移动,并判断两端的字符是否一样,在记录这个回文串的长度;

    image.png
  • 2、然后在假设以偶数开始,以ab为中心点,向两边扩展移动,并判断两端的字符是否一样,在记录这个回文串的长度;

image.png
  • 3、依次这样遍历即可得到最长的回文子串。
package com.zhoujian.solutions.leetcode;

import java.util.Scanner;

/**
 * @author zhoujian123@hotmail.com 2018/3/27 16:39
 */
public class A005 {

    private static int lo, maxLen;

    public static String longestPalindrome(String s) {
        int len = s.length();
        if (len < 2)
            return s;

        for (int i = 0; i < len-1; i++) {
            //假设是奇数
            extendPalindrome(s, i, i);  //assume odd length, try to extend Palindrome as possible
            //假设是偶数
            extendPalindrome(s, i, i+1); //assume even length.
        }
        return s.substring(lo, lo + maxLen);
    }

    private static void extendPalindrome(String s, int j, int k) {
        while (j >= 0 && k < s.length() && s.charAt(j) == s.charAt(k)) {
            j--;
            k++;
        }
        if (maxLen < k - j - 1) {
            //记录回文串的首尾的地址
            lo = j + 1;
            maxLen = k - j - 1;
        }
    }

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String line = sc.nextLine();
//        String s = "babacd";
        String palindrome = longestPalindrome(line);
        System.out.println(palindrome);
    }
}

结果如下:

image.png

时间复杂度为O(n^2)

相关文章

  • 最长回文子串

    最长回文子串——Manacher 算法 1. 问题定义 最长回文字符串问题:给定一个字符串,求它的最长回文子串长度...

  • 字符串算法

    最长公共前缀 最长回文串 最长回文子序列 最长公共子串 反转单词顺序列 反转字符串 字符串转数字 IP-int互转

  • 打卡-最长回文子串

    最长回文子串(中等)

  • 最长回文子序列

    该问题区别于最长回文子串,子串必须是连续的,而子序列则可以跳跃,例如AABCAA的最长回文子串为AA,但是它的最长...

  • Manacher算法

    最长回文子串问题# 给定一个字符串,找出最长的回文子串,如"waabwswbfd",则最长子串为bwsb. 中心试...

  • 最长回文子串问题—Manacher算法

    最长回文串问题是一个经典的算法题。 0. 问题定义 最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果...

  • LeetCode 第647题:回文子串

    1、前言 2、思路 此题与最长回文子串很像,只不过那个是求最长的回文子串,而这个是求回文子串的数目。但是他们的解法...

  • C语言实现求最长回文子串

    最长回文子串的概念 回文串是指正序和反序都一样的字符串,例如:Str1 = "AbbA",则Str1的最长回文子串...

  • Manacher's Algorithm算法分析Java

    Manacher's Algorithm俗称马拉车算法,对于求字符串中最长回文子串效率极高。 在求最长回文子串的时...

  • Manacher 算法学习笔记

    前言 给定一个字符串,求出其最长回文子串。例如:s="abcd",最长回文长度为 1;s="ababa",最长回文...

网友评论

      本文标题:最长回文子串

      本文链接:https://www.haomeiwen.com/subject/xcenqctx.html