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