博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Longest Palindromic Substring
阅读量:5126 次
发布时间:2019-06-13

本文共 1787 字,大约阅读时间需要 5 分钟。

Problem

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.

Example

Input: "babad"

Output: "bab"

Note: "aba" is also a valid answer.

Input: "cbbd"

Output: "bb"


Thinking

最大回文字串的长度满足单调性+范围,故二分答案,但同时要注意二分的时候分奇偶情况处理


Answer

public class Solution {    public String longestPalindrome(String s) {        if (s.equals("")) return "";        // 分为奇数情况和偶数情况,找出最大长度        int n = s.length();        int n0 = n / 2;        int n1 = n - n0;        int maxLen = Math.max(getMaxLen(s, 1, n0, 0),                              getMaxLen(s, 1, n1, 1));        // 找出最大长度对应的子字符串        for (int i = 0; i <= n-maxLen; i++){            String subs = s.substring(i, i+maxLen);            if (isPalindrome(subs))                return subs;        }        return "";    }    private int getMaxLen(String s, int low, int high, int flag){        int maxLen = 0;        // 二分答案        while (low <= high) {            int mid = (low + high) / 2;            int len = 2 * mid - flag;            if (hasPalindrome(s, len)) {                low = mid+1;                if (len >= maxLen)                    maxLen = len;            }            else {                high = mid-1;            }        }        return maxLen;    }    private boolean hasPalindrome(String s, int len){        int n = s.length();        if (len > n) return false;        for (int i = 0; i <= n-len; i++)            if (isPalindrome(s.substring(i, i+len)))                return true;        return false;    }    private boolean isPalindrome(String s) {        int n = s.length();        for (int i = 0; i < n/2; i++)            if (s.charAt(i) != s.charAt(n-1-i))                return false;        return true;    }}

转载于:https://www.cnblogs.com/aneureka/p/7285661.html

你可能感兴趣的文章
浙江省第十二届省赛 Beauty of Array(思维题)
查看>>
NOIP2013 提高组 Day1
查看>>
cocos2dx 3.x simpleAudioEngine 长音效被众多短音效打断问题
查看>>
存储(硬件方面的一些基本术语)
查看>>
观察者模式
查看>>
Weka中数据挖掘与机器学习系列之基本概念(三)
查看>>
Win磁盘MBR转换为GUID
查看>>
大家在做.NET B/S项目的时候多用什么设技术啊?
查看>>
Java SE和Java EE应用的性能调优
查看>>
Android设计模式系列--原型模式
查看>>
免费的论文查重网站
查看>>
C语言程序第一次作业
查看>>
leetcode-Sort List
查看>>
中文词频统计
查看>>
了解node.js
查看>>
想做移动开发,先看看别人怎么做
查看>>
Eclipse相关集锦
查看>>
虚拟化架构中小型机构通用虚拟化架构
查看>>
继承条款effecitve c++ 条款41-45
查看>>
Java泛型的基本使用
查看>>