Skip to content

Instantly share code, notes, and snippets.

@kartikkukreja
Last active October 15, 2016 22:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kartikkukreja/1a3ad2dad0a889e2fd938f565567f627 to your computer and use it in GitHub Desktop.
Save kartikkukreja/1a3ad2dad0a889e2fd938f565567f627 to your computer and use it in GitHub Desktop.
longest palindromic substring solution
int palindromeLengthFromCenter(string& A, int left, int right) {
int originalLeft = left;
while (left >= 0 && right < A.size() && A[left] == A[right]) {
left--;
right++;
}
return originalLeft - left;
}
string longestPalindrome(string A) {
int maxLen = 1, maxStart = 0;
for (int i = 0; i < A.size(); ++i) {
int s1 = palindromeLengthFromCenter(A, i-1, i+1); // center is at position i
int len1 = 1 + 2 * s1;
if (len1 > maxLen)
maxLen = len1, maxStart = i - s1;
int s2 = palindromeLengthFromCenter(A, i, i+1); // center is between positions i and i+1
int len2 = 2 * s2;
if (len2 > maxLen)
maxLen = len2, maxStart = i - s2 + 1;
}
string result(A.begin() + maxStart, A.begin() + maxStart + maxLen);
return result;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment