C++,Migrated from Lutece 1936 最长回文子串

/*
Migrated from Lutece 1936 最长回文子串
Description
读入一个全由小写英文构成的字符串, 求出其中最长的回文子串. 回文串是指正着看和倒着看相同, 如abba和yyxyy.

Input
有多组测试数据。第一行是整数T (T <= 100),表示测试数据的组数,随后有T组测试数据。
每一组测试数据占一行,是一个长度不超过1000的全由小写英文构成的字符串.

Output
对应每组输入,输出最长回文子串. 如果有多个最长子串, 则输出下标最小的那个.
*/
#include <iostream>
#include <string>
void solve(){
    std::string s;std::cin>>s;
    if(s.size()==0){
        std::cout<<std::endl;
        return;
    }
    int start = 0, maxLen = 1;
    for(int i = 0;i<s.size();++i){
        int l = i-1,r = i+1;
        while(l>=0 && r<s.size() && s[l]==s[r]){
            --l;++r;
        }
        if(r-l-1>maxLen){
            maxLen = r-l-1;
            start = l+1;
        }
        l=i,r=i+1;
        while(l>=0 && r<s.size() && s[l]==s[r]){
            --l;++r;
        }
        if(r-l-1>maxLen){
            maxLen = r-l-1;
            start = l+1;
        }
    }
    std::cout<<s.substr(start,maxLen)<<std::endl;
}
int main(){
    int T;std::cin>>T;
    while(T--){
        solve();
    }
}
posted @ 2025-03-12 19:12  Kazuma_124  阅读(12)  评论(0)    收藏  举报