LeetCode第五题:Longest Palindromic Substring(c++)详解

LeetCode:第五题
Longest Palindromic Substring

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

Example 1:

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

Example 2:

Input: “cbbd”
Output: “bb”

题目看下来,读者应该很熟悉,程序员面试宝典中必有的求最大回文字符串

字符串最大回文子字符串:
1.长度可为奇数和偶数,奇数情况,中间字符无须对应相同字符,偶数情况必须完全对称

解题代码如下:

class Solution {
public:
    string longestPalindrome(string s) {
       if(s.size() < 2)
       {
           return s;//单字符构成字符串直接返回
       }
        int n = s.size(),start = 0,maxlen = 0;
        for(int i = 0;i= 0 && right < s.size() && s[left] == s[right])//以left,right为基准,分别向左、向右遍历
        {
            --left;++right;
        }
        if(maxlen < right - left - 1)
        {
            start = left + 1;//记录回文字符串开始位置
            maxlen = right - left - 1;记录回文字符串的长度
        }
    }
};

性能图
LeetCode第五题:Longest Palindromic Substring(c++)详解_第1张图片

总结:
方法核心思想:
以字符串某个字符为基准,向左向右遍历字符串,比较相应下标字符是否相等,以此判断是否回文;
该方法须注意所求回文字符串为奇数或偶数的情况,须同时做出遍历,否则test case无法全部通过;
提示:可自行写demo来调试,查看数据流转,更能体会算法的独特之处。
一周又结束啦,祝大家晚安,新一周继续加油。

你可能感兴趣的:(leetcode)