标签:
// A O(n^2) time and O(1) space program to find the longest palindromic substring #include <string.h> // A utility function to print a substring str[low..high] void printSubStr(char* str, int low, int high) { for( int i = low; i <= high; ++i ) printf("%c", str[i]); } int longestPalSubstr(char *str) { int maxLength = 1; // The result (length of LPS) int start = 0; int len = strlen(str); int low, high; auto detect = [&]() { while (low >= 0 && high < len && str[low] == str[high]) { if (high - low + 1 > maxLength) { start = low; maxLength = high - low + 1; } --low; ++high; } }; // One by one consider every character as center point of // even and length palindromes for (int i = 1; i < len; ++i) { // Find the longest even length palindrome with center points // as i-1 and i. low = i - 1; high = i; detect(); // Find the longest odd length palindrome with center // point as i low = i - 1; high = i + 1; detect(); } printf("Longest palindrome substring is: "); printSubStr(str, start, start + maxLength - 1); return maxLength; } // Driver program to test above functions int main() { char str[] = "12312345665432112345678987654321123"; printf("\nLength is: %d\n", longestPalSubstr( str ) ); return 0; }
标签:
原文地址:http://www.cnblogs.com/ydlme/p/4521194.html