가장 긴 회문 부분 문자열 (C ++ 가장 긴 회문 부분 문자열)

문제 해결 아이디어 :

(1) 회문 문자열의 길이가 짝수 또는 홀수 일 수 있으므로 중앙 확장 방법

(2) 가장 긴 길이를 찾기 위해 각각 1과 2의 길이로 각 위치를 확장하십시오.

class Solution {
public:
    pair<int,int> helper(string &s,int left,int right) {
        while(left>=0 && right<s.length() && s[left]==s[right]) {
            left--;
            right++;
        }
        return pair(left+1,right-1);
    }
    string longestPalindrome(string s) {
        int start=0,end=0;
        for(int i=0;i<s.length();i++) {
            auto [left1,right1]=helper(s,i,i);
            auto [left2,right2]=helper(s,i,i+1);
            
            if(right1-left1>end-start) {
                start=left1;
                end=right1;
            }
            
            if(right2-left2>end-start) {
                start=left2;
                end=right2;
            }
            
        }
        return s.substr(start,end-start+1);
    }
};

 

추천

출처blog.csdn.net/coolsunxu/article/details/114890560