LeetCode5[C++]

最长回文子串题目:https://leetcode-cn.com/problems/longest-palindromic-substring/

  • 法一(倒置法/其实不知道算不算DP算法):先把s倒置,然后对比,比出最长回文子串,这样的思路是对的,但是有一些另类的情况,比如abacdfgdcaba,如果直接对比会输出abacd,但是答案确实aba。那么我们应该怎么处理呢?

    首先,我们需要判断该字符串倒置前的下标和当前的字符串下标是不是一致。就是判断是否同一个字符字串。

    可以参考:https://leetcode-cn.com/problems/two-sum/solution/xiang-xi-tong-su-de-si-lu-fen-xi-duo-jie-fa-bao-gu/

  • C++代码:

class Solution {
public:
    string longestPalindrome(string s) {
        if(s=="")
            return "";
        string str(s.rbegin(),s.rend());
        vector> res(s.size(),vector(s.size(),0));
        int max_len=0;
        int max_end=0;
        for(int i=0;i
  • 法二:中心扩展,就是以一个中心,向两边找相同的,但是中心有可能是一个也有可能是两个相同的。例如:“abac”,最终找到结果的那一步是,下标为1且中心为b,然后向两边找,有两个a相等,再找,找不到,即aba。又例如:“cbbd”,最终找到结果的那一步是,下标为1,然后中心为bb,向两边找,找不到,即bb。
  • C++代码:
class Solution {
public:
    string longestPalindrome(string s) {
        if(s=="")
            return "";
        int start=0;
        int end=0;
        int max_len=0;
        for(int i=0;imax_len)
            {
                max_len=len;
                start=i-(len-1)/2;//减一是因为如果是双数中心,有两个相同的,start要左移
                end=i+len/2;
            }
        }
         
        return s.substr(start,max_len);
    }
    
    int Centre(string s,int left,int right)
    {
        while(left>=0&&right

你可能感兴趣的:(笔记)