一:解题思路
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); } }