【PAT甲级 寻找最长回文串】1040 Longest Symmetric String (25 分)

我还以为是什么动态规划,做了一下就是简单的回文字符串的判断而已,从当前i处的字符左右同时遍历寻找相同字符,速度很快
在这里插入图片描述

# include <bits/stdc++.h>
using namespace std;

string S;

int main() {
    
    
    getline(cin, S);
    int maxLen = 1;
    for(int i = 0;i < S.size();++i){
    
    
        int l = i-1, r = i+1;
        int tempLen = 0;
        if(S[i] == S[r]) {
    
     // 偶数情况
            l = i; // i和r处字符相等,所以让l等于i
            while(S[l] == S[r] && l >= 0 && r < S.size()) {
    
     // 检查i的两侧的相等字符
                tempLen+=2;
                l--, r++;
            }
        } else
        if(S[l] == S[r]) {
    
     // 奇数情况
            tempLen = 1; // 奇数情况将中间i处的字符算入长度
            while(S[l] == S[r] && l >= 0 && r < S.size()) {
    
     // 检查i的两侧的相等字符
                tempLen+=2;
                l--, r++;
            }
        }
        maxLen = max(maxLen, tempLen);
    }
    cout << maxLen << endl;

    return 0;
}

猜你喜欢

转载自blog.csdn.net/MYMarcoreus/article/details/114370725