求解最长回文子串

// 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;

}

 

你可能感兴趣的:(回文)