My solution:
class Solution { public: int isPalindromic(string s, int size, int len){ for(int i=0; i+size<=len; i++){ //check s[i]~s[i+size-1] int j = 0; while(j<size/2){ if(s[i+j] != s[i+size-1-j]) break; j+=1; } if(j==size/2) return i; } return -1; } string longestPalindrome(string s) { int len = s.size(); for(int sublen = len; sublen>0; sublen--){ int ret = isPalindromic(s, sublen, len); if(ret>=0) return s.substr(ret, sublen); } return s; } };
Other guy's solution:
class Solution { public: string longestPalindrome(string s) { int sLen = s.length(), maxLen = 0, maxStart = 0; int i = 0, l = 0, r = 0, len = 0; while(i<=sLen-maxLen/2) { l = r = i; while(r<sLen-1 && s[r+1]==s[r]) r++; i = r+1; while(l>0 && r<sLen-1 && s[r+1]==s[l-1]) l--, r++; len = r-l+1; if(maxLen < len) maxLen = len, maxStart = l; } return s.substr(maxStart, maxLen); } };