求解最长回文子串

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

 

转载于:https://www.cnblogs.com/ydlme/p/4521194.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值