题目链接

题目描述

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

示例 1

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

示例 2

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

题解(中心扩展算法)

public String longestPalindrome(String string) {
if (null == string || string.length() < 1) return "";
int start = 0, end = 0;
int num1, num2, len;
for (int i = 0; i < string.length(); i++) {
num1 = getMaxLength(string, i, i);
num2 = getMaxLength(string, i, i + 1);
len = Math.max(num1, num2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return string.substring(start, end + 1);
} public int getMaxLength(String s, int left, int right) {
int L = left, R = right;
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
L--;
R++;
}
return R - L - 1;
}

复杂度分析

  • 时间复杂度:$O(n^2)$,由于围绕中心来扩展回文会耗去 O(n) 的时间,所以总的复杂度为 :$O(n^2)$

  • 空间复杂度:$O(1)$

手记

中心扩展法相比暴力更理智一些,没有了盲目的循环,更多是以两种情况下的分界中心向两侧不断递减比较。

还有一个算法复杂度为$O(n)$的Manacher 算法,等后续学习了再补上。

网易云—《浪子回头》

以上

Java算法练习——最长回文子串的更多相关文章

  1. Manacher算法——求最长回文子串

    首先,得先了解什么是回文串.回文串就是正反读起来就是一样的,如“abcdcba”.我们要是直接采用暴力方法来查找最长回文子串,时间复杂度为O(n^3),好一点的方法是枚举每一个字符,比较较它左右距离相 ...

  2. manacher算法求最长回文子串

    一:背景 给定一个字符串,求出其最长回文子串.例如: s="abcd",最长回文长度为 1: s="ababa",最长回文长度为 5: s="abcc ...

  3. 面试经典算法:马拉松算法,最长回文子串Golang实现

    求一个字符串中最长的回文子串. package main import "fmt" /* 马拉松算法,求最长回文子串,时间复杂度:线性 */ func main() { // 回文 ...

  4. 使用manacher算法解决最长回文子串问题

    要解决的问题 求一个字符串最长回文子串是什么.且时间复杂度 O(N) 具体描述可参考: LeetCode_5_最长回文子串 LintCode_200_最长回文子串 暴力解法 以每个字符为中心向左右两边 ...

  5. Manacher算法 求 最长回文子串

    1 概述(扯淡) 在了解Manacher算法之前,我们得先知道什么是回文串和子串. 回文串,就是正着看反着看都一样的字符串.比如说"abba"就是一个回文串,"abbc& ...

  6. 【算法】最长回文子串 longest palindrome substring

    对于字符串S, 要找到它最长的回文子串,能想到的最暴力方法,应该是对于每个元素i-th都向左向右对称搜索,最后用一个数组span 记录下相对应元素i-th为中心的回文子串长度. 那么问题来了: 1. ...

  7. 小白月赛13 B小A的回文串 (马拉车算法求最长回文子串)

    链接:https://ac.nowcoder.com/acm/contest/549/B来源:牛客网 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 262144K,其他语言52428 ...

  8. hihocoder #1032 : 最长回文子串 Manacher算法

    题目链接: https://hihocoder.com/problemset/problem/1032?sid=868170 最长回文子串 时间限制:1000ms内存限制:64MB 问题描述 小Hi和 ...

  9. hdu 3068 最长回文(manachar求最长回文子串)

    题目连接:hdu 3068 最长回文 解题思路:通过manachar算法求最长回文子串,如果用遍历的话绝对超时. #include <stdio.h> #include <strin ...

随机推荐

  1. 说说我对SQL语句执行顺序的理解,以SQL Server为例

    有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...

  2. HDU 5045 状压DP 上海网赛

    比赛的时候想的是把n个n个的题目进行状压 但这样不能讲究顺序,当时精神面貌也不好,真是挫死了 其实此题的另一个角度就是一个n个数的排列,如果我对n个人进行状压,外面套一个按题目循序渐进的大循环,那么, ...

  3. StringGrid换行功能

    关闭stringgrid的defaultdrawing功能 StringGrid1.Cells[cCol,cRow] := '测试1'+#13#10+'测试2'; procedure TForm1.S ...

  4. Jquery动画效果设置大全

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. 请求http协议分析- (mysql-thinkphp) (5)

    http协议 https://tools.ietf.org/pdf/rfc7231.pdf https://www.w3.org/Protocols/ ======================== ...

  6. LVS负载均衡基本原理

    负载均衡基本原理与lvs 基本介绍 1.1 负载均衡的由来 在业务初期,我们一般会先使用单台服务器对外提供服务.随着业务流量越来越大,单台服务器无论如何优化,无论采用多好的硬件,总会有性能天花板,当单 ...

  7. BGR to RGB排列

    BGR to RGB排列 2012年09月27日 13:59:48 雷电羊 阅读数:4759   https://blog.csdn.net/cjsycyl/article/details/80247 ...

  8. JS - 判断字符串某个下标的值

    <html><body> <script type="text/javascript"> var str="0123456789!&q ...

  9. SQL中Left Join 与Right Join 与 Inner Join 与 Full Join的区别

    原文:http://blog.csdn.net/shadowyelling/article/details/7684714 Left Join : 返回左表中的全部信息 以及右表中与左表条件相关的信息 ...

  10. ios端简单改变webView的黑白夜模式

    extension HTController:WKUIDelegate, WKNavigationDelegate,WKScriptMessageHandler { func userContentC ...