(算法分析Week6)Longest Palindromic Substring[Medium]

来源:互联网 发布:什么商品淘宝禁止出售 编辑:程序博客网 时间:2024/06/07 14:10

5. Longest Palindromic Substring

题目来源

Description

Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000
Example:

Input: "babad"Output: "bab"Note: "aba" is also a valid answer.

Example:

Input: "cbbd"Output: "bb"

Solution

Solution1:遍历整个字符串,把每一个字符当成中心向两边拓展,找到最长回文串。
Solution2:Manacher算法,具体可以参考[译+改]最长回文子串(Longest Palindromic Substring)

Complexity analysis

Manacher算法,O(n)

Code

 class Solution {public:    string longestPalindrome(string s) {        string temp = "^#";        for (int i = 0; i < s.length(); i++) {            temp += s[i];            temp += "#";        }        temp += "&";        int length = temp.length();        int id = 0;        int R = 0;        int arr[length];        for (int i = 1; i < length - 1; i++) {            int li = id - (i - id);            int diff = R - i;            if (diff >= 0) {                if (arr[li] < diff) {                    arr[i] = arr[li];                } else {                    arr[i] = diff;                    while(temp[i+arr[i] + 1] == temp[i - arr[i] - 1]) {                        arr[i]++;                    }                        id = i;                        R = i+arr[i];                }            } else {                arr[i] = 0;                    while(temp[i+arr[i] + 1] == temp[i - arr[i] - 1]) {                        arr[i]++;                    }                        id = i;                        R = i+arr[i];            }        }        int max = 0;        int center = 0;        for (int i = 1; i < length-1; i++) {            if (arr[i] > max) {                max = arr[i];                center = i;            }        }        return s.substr((center-max)/2, max);    }};

Result

这里写图片描述

阅读全文
0 0
原创粉丝点击