码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 之 Longest Palindrome

时间:2015-09-18 13:46:56      阅读:108      评论:0      收藏:0      [点我收藏+]

标签:

#include <cstdio>
#include <algorithm>

int MAX_SIZE = 100000;

int gen_odd_str(const char * str, char * odd_str) {
    int i = 0;
    for (i = 0; *str != 0 ; ++i, ++str) {
        odd_str[2 * i] = #;
        odd_str[2 * i + 1] = *str;
    }
    odd_str[2 * i] = #;
    odd_str[2 * i + 1] = 0;
    return 2 * i + 1;
}

char* longestPalindrome(char* str) {
    using std::max;
    using std::min;
    char odd_str[MAX_SIZE];
    int p[MAX_SIZE], id, i, j, size;
    size = gen_odd_str(str, odd_str); p[0] = 1; id = 0;
    for (i = 1; i < size; ++i) {
        p[i] = max(1, min(p[id] - i, 2 * id - i > -1 ? p[2 * id - i] : 0));
        for (j = i - 1; j > -1 && odd_str[j] == odd_str[2 * i - j]; --j) ++p[i];
        if (p[i] > p[id]) id = i;
    }
    str = str + (id - p[id] + 1) / 2;
    str[p[id] - 1] = 0;
    return str;
}

int main(){
    char str[MAX_SIZE];
    while (!feof(stdin)) {
        gets(str);
        printf("%s", longestPalindrome(str));
    }
}

技术分享

Leetcode 之 Longest Palindrome

标签:

原文地址:http://www.cnblogs.com/Dream-Fish/p/4818936.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!