题解 | #最长回文子序列#

最长回文子序列

https://www.nowcoder.com/practice/82297b13eebe4a0981dbfa53dfb181fa

f[i][j]为范围从i到j的最长回文子序列

当s[i] == s[j]时 f[i + 1][j - 1] + 2

当s[i] != s[j]时 max(f[i][j - 1], f[i + 1][j])

初始化:当i不断向右移动j不断向左移动,最终会到中间i == j的位置,这个时候是需要初始化 f[i][i] = 1

由于 要从i + 1 推出 i 从j - 1推出 j 所以i要-- j要++ 即i从后往前遍历的顺序 而j必须要时刻大于i 因为[i,j]范围

#include <iostream>
using namespace std;

const int N = 1010;
int f[N][N];

int main() {
    string s;
    cin >> s;
    int res = 0;
    for (int i = 0; i < s.size(); i ++) f[i][i] = 1;
    for (int i = s.size() - 1; i >= 0; i --) {
        for (int j = i + 1; j < s.size(); j ++) {
            if (s[i] == s[j]) f[i][j] = f[i + 1][j - 1] + 2;
            else f[i][j] = max(f[i + 1][j], f[i][j - 1]);
        }
    }
    res = f[0][s.size() - 1];
    cout << res << endl;

}

全部评论

相关推荐

不愿透露姓名的神秘牛友
昨天 18:13
点赞 评论 收藏
分享
看到这个内容真是闹麻了。。。。。。现在有了AI以后很多人面试都会作弊吗?&nbsp;那对老老实实面试的人岂不是不公平....
程序员牛肉:公平那是对小孩子讲的童话故事,成年人的世界只有能不能接受失败的后果。 你要是能接受面试作弊被发现之后多家公司联合永久拉黑的后果,你就搞。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
07-02 13:50
闽江学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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