5. Longest Palindromic Substring

来源:互联网 发布:windows平板镜像下载 编辑:程序博客网 时间:2024/05/29 08:19

题目

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”

思路

遍历字符串,以当前字符为轴值(需要处理连续轴值),向两侧查找回文(注意边界溢出处理),记录最长回文即回文起始位置索引。
Trick:当前字符距离字符串尾部距离小于当前最长回文一半时,停止查找。
根据其他大神的描述,这属于中心扩展法,还有动态规划法,待实现。
C++实现代码:

string longestPalindrome(string s) {    if (s.empty()) return "";    if (s.size() == 1) return s;    int start = 0, len = 1;    for (int i = 0; i < s.size();) {        if (s.size() - i <= len / 2) break;//当剩余字符长度小于当前最长回文长度的一半时,停止遍历        int j = i, k = i;        while (k < s.size() - 1 && s[k + 1] == s[k]) ++k; // 处理连续重复轴值        i = k + 1;        while (k < s.size() - 1 && j > 0 && s[k + 1] == s[j - 1]) { ++k; --j; } // 以轴值为中心向两侧查找回文        int new_len = k - j + 1;//计算回文长度        if (new_len > len) { start = j; len = new_len; }//更新最大回文长度和回文起始位置    }    return s.substr(start, len);//采用substr函数获取子字符串}