leetcode-5- Longest Palindromic Substring

来源:互联网 发布:spss统计软件 编辑:程序博客网 时间:2024/06/15 12:31

难度

medium

描述

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

示例

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.Input: "cbbd"Output: "bb"

我的代码

测试用例没过,超过时间。class Solution {public:    string longestPalindrome(string s) {        int maxSize = 0;        string substring = "";        string temp = "";        int pos = 0;        while(pos < s.size())        {            for(int i = pos;i < s.size();i++)            {                temp = s.substr(pos,i-pos+1);                if(isPalindromic(temp) && temp.size() > maxSize)                {                    maxSize = temp.size();                    substring = temp;                      }            }            pos++;        }        return substring;    }    bool isPalindromic(string ss){        int size = ss.size();        int i = 0,j = size -1;        while(i < j)        {            if(ss[i] != ss[j])                break;            i++;            j--;        }        if(i >= j)            return true;        return false;    }};

更优代码

public String longestPalindrome(String s) {    int start = 0, end = 0;    for (int i = 0; i < s.length(); i++) {        int len1 = expandAroundCenter(s, i, i);        int len2 = expandAroundCenter(s, i, i + 1);        int len = Math.max(len1, len2);        if (len > end - start) {            start = i - (len - 1) / 2;            end = i + len / 2;        }    }    return s.substring(start, end + 1);}private int expandAroundCenter(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;}