题解 | #回文字符串#

回文字符串

http://www.nowcoder.com/practice/5bfb74efcd5449e69a480550b1fef431

图片说明

dp[i][j]的意义:在子串 s[i...j] 中,最长的回文子串长度。

#include <bits/stdc++.h>

using namespace std;

int longestPalindromeSubseq(const string& str) {
    int length = str.size();
    vector<vector<int> > dp(length, vector<int>(length, 0));

    // 初始对角值设为 1
    for (int i = 0; i < length; i++) {
        dp[i][i] = 1;
    }

    // 只有上三角矩阵是起作用的
    // 从下往上,从左往右遍历
    for (int i = length - 2; i >= 0; i--) {
        for (int j = i + 1; j < length; j++) {
            // 如果 str[i] == str[j]
            if (str[i] == str[j])
                dp[i][j] = dp[i+1][j-1] + 2;
            else {
                dp[i][j] = std::max(dp[i][j-1], dp[i+1][j]);
            }
        }
    }

    return dp[0].back();

}

int main(){
    // 输入字符串
    string inputStr{};
    cin >> inputStr;

    cout << longestPalindromeSubseq(inputStr);

    return 0;
}

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 11:30
找工作7个月,投了7000封,3段世界五百强实习,才有一个offer,牛油们肯定比我强吧
码农索隆:不对不对不对,实习经历这么厉害,简历也没少投,问题出在哪呢
点赞 评论 收藏
分享
06-05 19:46
已编辑
武汉大学 后端
点赞 评论 收藏
分享
Twilight_m...:经典我朋友XXXX起手,这是那种经典的不知道目前行情搁那儿胡编乱造瞎指导的中年人,不用理这种**
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务