【leetcode】5. Longest Palindromic Substring

题目描述:

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

解题分析:

之前百度实习生面试也被问到这个问题。这个题比较简单。就是在分别考虑对称字符字串为奇数和偶数的情况,在不超过字符串范围的情况下向两边扩展,找到最大值,并记录下最大子串的位置,最后返回即可。

具体代码:

public class Solution {
    public static String longestPalindrome(String s) {
        if(s==null)
            return null;
        if(s.length()==0)
            return "";
        if(s.length()==1)
            return s;
        if(s.length()==2){
            if(s.charAt(0)!=s.charAt(1)){
                return s.substring(1);
            }
            else
                return s;
        }
        int max=1;
        int start=0;
        int end=0;
        char[] array=s.toCharArray();
        //对称字符字串长度为数的情况
        for(int i=1;i<s.length()-1;i++){
            int from=i;
            int to=i;
        //    要保证不超过字符数组边界的情况下,待扩展的两字符相等
            while(from>=0&&to<s.length()&&array[from]==array[to]){
                from--;
                to++;
            }
            int len=to-from-1;
            if(len>max){
                start=from+1;
                end=to-1;
                max=len;
            }
        }
        //对称字符字串长度为偶数的情况
        for(int i=0;i<s.length()-1;i++){
            if(array[i]!=array[i+1])
                continue;
            int from=i;
            int to=i+1;
            while(from>=0&&to<s.length()&&array[from]==array[to]){
                from--;
                to++;
            }
            int len=to-from-1;
            if(len>max){
                start=from+1;
                end=to-1;
                max=len;
            }
        }
        return s.substring(start,end+1);
    }
}
时间: 2024-11-08 19:18:45

【leetcode】5. Longest Palindromic Substring的相关文章

【LeetCode】005 Longest Palindromic Substring

题目:LeetCode 005 Longest Palindromic Substring Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 题意:字符串S,找到S中的最长回文子串.假定S最长为100

【LeetCode】5. Longest Palindromic Substring 最大回文子串

题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路:用Manacher算法得到最大回文子串的长度,得到带#的最大回文子串,用split剔除#后转化成String形式输出即可. public

LeetCode(3)题解: Longest Palindromic Substring

https://leetcode.com/problems/longest-palindromic-substring/ 题目: Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 思路: 我的思路是遍

LeetCode OJ:Longest Palindromic Substring(最长的回文字串)

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 玩了两天dota2,罪过罪过,还是应该老老实实刷题啊. 题目求得是最长的回文子串,这里使用的是暴力的解法,也就是解决两种回文"asdsa"以

LeetCode题解 #5 Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 在给定一个字符串S中,找到最长的回文串. 很恶心的一道题,不过应该都能想到枚举,从第一个开始枚举.枚举的字母向两头延伸,如果相同则继续,不同则开始下一

LeetCode No.5 Longest Palindromic Substring

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring. 最长回文子串. 有两种思路: 1,从左向右找对称点,从对称点(或者两个相同的相邻字符)向两边搜索,记下搜到的最大长度. 2,设置一个二维bool数组,

【SPOJ】1812. Longest Common Substring II(后缀自动机)

http://www.spoj.com/problems/LCS2/ 发现了我原来对sam的理解的一个坑233 本题容易看出就是将所有匹配长度记录在状态上然后取min后再对所有状态取max. 但是不要忘记了一点:更新parent树的祖先. 为什么呢?首先如果子树被匹配过了,那么长度一定大于任意祖先匹配的长度(甚至有些祖先匹配长度为0!为什么呢,因为我们在匹配的过程中,只是找到一个子串,可能还遗漏了祖先没有匹配到,这样导致了祖先的记录值为0,那么在对对应状态去min的时候会取到0,这样就wa了.而

【LeetCode】003 Longest Substring Without Repeating Characters

题目:LeetCode 003 Longest Substring Without Repeating Characters 题意:给一个字符串,找到一个没有重复字符的最长子串. 样例:”bbbbb” 返回”b”的长度1:”abcabcbb”返回”abc”的长度3. 思路: 动态规划.dp[i]表示以第i个字符为结尾的无重复字符的子串的最长的长度,需要一个辅助数组idx[s[i]]记录字符当前字符s[i]上一次出现的位置,如果未出现过则为-1.所以得到如下的递推公式: 另外由于不确定字符串长度的

【LeetCode】3. Longest Substring Without Repeating Characters

题目: Given a string, find the length of the longest substring without repeating characters. Examples: Given "abcabcbb", the answer is "abc", which the length is 3. Given "bbbbb", the answer is "b", with the length of