5. 最长回文子串 - 力扣(LeetCode)

#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <algorithm>
#include <climits>
#include <unordered_map>

using namespace std;

vector<int> read_line_data();
void output_data(const vector<int>& data);

class Solution {
public:
    string longestPalindrome(string s) {
        int n = s.size();
        vector<vector<bool>> dp(n, vector<bool>(n, false));
        int max_length = 0;
        int left = 0;
        int right = 0;
        for (int i = n - 1; i >= 0; i--) {
            for (int j = i; j < n; j++) {
                if (s[i] == s[j]) {
                    if (j - i <= 1) {
                        dp[i][j] = true;
                    } else if (dp[i + 1][j - 1]) {
                        dp[i][j] = true;
                    }
                }
                if (dp[i][j] && ((j - i + 1) >= max_length)) {
                    max_length = j - i + 1;
                    left = i;
                    right = j;
                }
            }
        }
        cout << left << " " << right << endl;
        return s.substr(left, right - left + 1);
    }
};

int main() {
    Solution s;
    cout << s.longestPalindrome("babad") << endl;
    return 0;
}

vector<int> read_line_data() {
    string src;
    getline(cin, src);
    istringstream iss(src);

    vector<int> data;
    int token;
    while(iss >> token) {
        data.push_back(token);
    }

    return data;
}

void output_data(const vector<int>& data) {
    int n = data.size();
    for (int i = 0; i < n; i++) {
        cout << data[i] << " ";
    }
}
07-08 23:41