题意:
        给定一个字符串,输出最长回文子串的长度。

方法一:
中心拓展法

思路:
        遍历,以字符串的每个字符作为中心,向左右两边拓展,寻找最长回文子串的长度。
        分为两种情况:
                                1)以s[i]作为中心
                                2)先判断s[i-1]==s[i],如果相等,s[i-1]和s[i]作为中心
                             

        

#include <bits/stdc++.h>

using namespace std;

int main(){
    
    string s;
    cin >> s;
    int len=s.size();
    int res=0;
    for(int i=0;i<len;i++){//遍历,以s[i]为中心向两边拓展
        int j=i-1,k=i+1;//以s[i]作为中心
        while(j>=0&&k<len){
            if(s[j]!=s[k])
                break;
            j--;
            k++;
        }
        res=max(res,k-j-1);
        if(i-1>=0&&s[i-1]==s[i]){//先判断s[i-1]==s[i],如果相等,s[i-1]和s[i]作为中心
            j=i-2;
            k=i+1;
            while(j>=0&&k<len){
                if(s[j]!=s[k])
                    break;
                j--;
                k++;
            }
            res=max(res,k-j-1);
        }
    }
    cout << res << endl;//输出维护的最大值
    return 0;
}


时间复杂度:
空间复杂度:

方法二:
区间法

思路:
        二重循环得到区间的左右下标。
        再判断这个区间是否为回文子串。
        维护回文子串长度的最大值。

#include <bits/stdc++.h>

using namespace std;

int main(){
    
    string s;
    cin >> s;
    int len=s.size();
    int res=1;//初始化最小值为1
    for(int i=0;i<len;i++){//二重循环
        for(int j=i+1;j<len;j++){
            int l=i,r=j;//得到区间的左右下标
            while(l<r){
                if(s[l]!=s[r]){//如果不相等,则退出
                    break;
                }
                
                l++;
                r--;
            }
            if(l>=r){
                res=max(res,j-i+1);//维护最大值
            }
        }
    }
    cout << res << endl;
    return 0;
}
时间复杂度:
空间复杂度: