Given a string find the largest substring which is palindrome.
Solution:
Test if a substring is a palindrome starting from its potential "center":
int longestPalindromicSubstring(char* str)
{
int len = strlen(str);
int maxLength = 1;
int start = 0;
int low, high;
for(int i = 1; i < len; i++)
{
// Find longest even length palindrome with
// center points as i-1 and i
low = i-1;
high = i;
while(low >= 0 && high < len && str[low] == str[high])
{
if(high - low + 1 > maxLength)
{
start = low;
maxLength = high - low + 1;
}
low--;
high++;
}
// Find longest odd length palindrom with
// center point as i
low = i-1;
high = i+1;
while(low >= 0 && high < len && str[low] == str[high])
{
if(high - low + 1 > maxLength)
{
start = low;
maxLength = high - low + 1;
}
low--;
high++;
}
}
printf("Longest Palindromic Substring is: ");
for(int i = start; i <= start + maxLength - 1; i++)
{
printf("%c", str[i]);
}
return maxLength;
}
Complexity:
time - O(n^2)Links and credits:
space - O(1)
http://www.careercup.com/question?id=20351666
O(n) algorithm (Manacher's Algorithm) is discussed at http://discuss.leetcode.com/questions/178/longest-palindromic-substring
No comments:
Post a Comment