p92 最长回文子串(leetcode 5)

一:解题思路

Time:O(n^2),Space:O(1),相同的Java程序改到C++却不能运行有点奇怪!还是把程序贴上。原因可能之后会想出来!

二:完整代码示例 (C++版和Java版)

C++:

class Solution {
private:
    int expand(string s, int left, int right)
    {
        while (left >= 0 && right < s.length() && s[left] == s[right])
        {
            left--;
            right++;
        }
        return right - left - 1;
    }
public:
    string longestPalindrome(string s)
    {
        if (s.length() == 0) return "";
        int maxLen = 0;
        int start = 0;
        for (int i = 0; i < s.length(); i++)
        {
            int len1 = expand(s, i, i);
            int len2 = expand(s, i, i + 1);
            int len = max(len1, len2);
            if (len > maxLen)
            {
                start = i - (len - 1) / 2;
                maxLen = len;
            }
        }

        return s.substr(start, start + maxLen);
    }
};

Java:

class Solution {
        private int expand(String s,int left,int right)
        {
            while (left>=0 && right<s.length() && s.charAt(left)==s.charAt(right))
            {
                left--;
                right++;
            }
            return right-left-1;
        }

        public String longestPalindrome(String s)
        {
               if(s==null || s.length()==0) return "";
               int maxLen=0;
               int start=0;
               for(int i=0;i<s.length();i++)
               {
                   int len1=expand(s,i,i);
                   int len2=expand(s,i,i+1);
                   int len=Math.max(len1,len2);
                   if(len>maxLen)
                   {
                       start=i-(len-1)/2;
                       maxLen=len;
                   }
               }

               return s.substring(start,start+maxLen);
        }
    }

猜你喜欢

转载自www.cnblogs.com/repinkply/p/12642260.html