poj 1159 Palindrome(最长公共子串)

简介: 关于求最长公共子串, 用到的是动态规划

大概题意就是求最少添加多少个字符可以把长度为N的字符串编程回文串。


则需要最少需要补充的字母数 = 原序列S的长度 —  S和S'的最长公共子串长度


S'为原串的逆串。


关于求最长公共子串, 用到的是动态规划


伪代码如下



if( i ==0 || j == 0 ) {


      MaxLen(i, j) = 0 //两个空串的最长公共子序列长度当然是0


}


else if( s1[i] == s2[j] )


         MaxLen(i, j) = MaxLen(i-1, j-1 ) + 1;


else {


       MaxLen(i, j) = Max( MaxLen(i, j-1), MaxLen(i-1, j));


}


具体可参考算法导论第三版222页



18a919bc8e999e19742e97cfc437f435_0_131208597048nz.gif



//2013-05-30-19.58
//poj 1159
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;
const int maxn = 5005;
short dp[maxn][maxn];
char s1[maxn], s2[maxn];
int main()
{
    int n;
    while (scanf("%d", &n) != EOF)
    {
        getchar();
        for (int i = 1; i <= n; i++)
        {
            scanf("%c", &s1[i]);
            s2[n-i+1] = s1[i];
        }
        memset(dp, 0, sizeof(dp));
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                if (s1[i] == s2[j])
                    dp[i][j] = dp[i-1][j-1]+1;
                else
                    dp[i][j] = max(dp[i-1][j], dp[i][j-1]);
            }
        }
        printf("%d\n", n-dp[n][n]);
    }
    return 0;
}
目录
相关文章
|
自然语言处理 IDE 测试技术
通义灵码史上最全使用教程:秀一秀AI编程新肌肉
通义灵码是阿里云推出的一款智能编码辅助工具,基于通义大模型,提供行级/函数级实时续写、自然语言生成代码、单元测试生成、代码优化、注释生成、代码解释、研发智能问答、异常报错排查等功能。它支持 Visual Studio Code 和 JetBrains IDEs,适配多 IDE 原生设计,帮助开发者高效、流畅地编码。官方提供了详细的下载和安装指南,以及丰富的功能介绍和使用指南。
3877 4
|
SQL 数据库
org.flywaydb.core.api.FlywayException: Schema “xxx” contains a failed migration to version 156!
org.flywaydb.core.api.FlywayException: Schema “xxx” contains a failed migration to version 156!
392 0
|
设计模式 Java 容器
聊聊Java设计模式-访问者模式
访问者模式(Visitor Pattern)指将作用域某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作。
131 3
聊聊Java设计模式-访问者模式
|
机器学习/深度学习 数据采集 数据可视化
Python在数据分析领域的应用研究
Python在数据分析领域的应用研究
278 0
|
消息中间件 存储 API
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
需求:收款到账语音提醒功能 NSE是比Voip更优雅的解决方案,完成迁移后,总体代码量也比Voip方案少了不少。
485 0
iOS小技能:队列管理推送通知,解决收款到账并发语音播报问题。
|
XML 前端开发 数据库
Layui之动态树(树形菜单)详解2
Layui之动态树(树形菜单)详解2
121 0
|
算法 调度
进程的调度常用算法
进程的调度常用算法
|
Java 应用服务中间件 Linux
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
实战:第十三章:HTTP Status 500 – Internal Server Error(解决SpringBoot架构的Web项目部署到linux系统上访问出错)
460 0
|
存储 对象存储
偏向锁
基础
198 0
|
Dubbo 应用服务中间件 开发者
服务降级|学习笔记
快速学习服务降级
服务降级|学习笔记