题目链接

【问题描述】

如果一个字符串正过来读和倒过来读是一样的,那么这个字符串就被称作回文串。例如abcdcba,abcddbca就是回文串,而abcdabcd不是。

你要解决的问题是:对于任意一个字符串,输出将这个字符串变为回文串需要插入的最少字符个数,比如,ab3bd只需要插入2个字符就可以变为一个回文串。

【输入格式】

第一行是一个整数N

第二行是一个长度为N字符串S

【输出格式】

一行一个整数,表示将S变为回文串需要插入的最小字符个数

【输入样例 】

5

ab3bd

【输出样例】

2

【数据范围 】

对于所有数据,0〈n<=5000

【解题思路】

回文的意思就是正读和反读都一样。

那么基本思路就出来了,输入字符串之后把字符串倒过来接着求最长公共子序列的长度,剩下的就是要插入的长度。

但是有简化的做法,只需要把最长公共子序列的状态转移方程修改一下。

原来的状态转移方程如下:

if (s1[i]==s2[j]) f[i][j]=f[i-1][j-1]+1;
f[i][j]=max(f[i][j],max(f[i-1][j],f[i][j-1));

那么根据题意进行修改就可以了

i为倒循环,j为顺循环,i<=j<len
可以解释为第一重循环表示len-1到i的字符串,第二重循环表示i到len-1的部分
if (s[i]==s[j]) f[i][j]=f[i+1][j-1];//相同则不必添加字符
f[i][j]=min(f[i+1][j],f[i][j-1)+1);//不同则要+1,取最小

最后只需要

输出f[0][len-1]即可

【参考程序】(与解题思路的变量不同)

#include<iostream>
#include<cstdio>
using namespace std;
int n,f[5010][5010];
char a[5010];
int main()
{
cin>>n;
for (int i=1;i<=n;i++) cin>>a[i];
for (int i=n;i>0;i--)
for (int j=i;j<=n;j++)
if (a[i]==a[j]) f[i][j]=f[i+1][j-1];
else f[i][j]=min(f[i+1][j]+1,f[i][j-1]+1);
cout<<f[1][n];
return 0;
}

【CPLUSOJ】【动态规划】最短回文串的更多相关文章

  1. [Swift]LeetCode214. 最短回文串 | Shortest Palindrome

    Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  2. [python,2019-02-15] 最短回文串

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  3. leetcode 214. 最短回文串 解题报告

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: "aaa ...

  4. 214 Shortest Palindrome 最短回文串

    给一个字符串 S, 你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串.例如:给出 "aacecaaa",返回 "aaacecaaa ...

  5. Leetcode 214.最短回文串

    最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出: &qu ...

  6. Java实现 LeetCode 214 最短回文串

    214. 最短回文串 给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串.找到并返回可以用这种方式转换的最短回文串. 示例 1: 输入: "aacecaaa" 输出 ...

  7. [LeetCode] Shortest Palindrome 最短回文串

    Given a string S, you are allowed to convert it to a palindrome by adding characters in front of it. ...

  8. 算法进阶面试题01——KMP算法详解、输出含两次原子串的最短串、判断T1是否包含T2子树、Manacher算法详解、使字符串成为最短回文串

    1.KMP算法详解与应用 子序列:可以连续可以不连续. 子数组/串:要连续 暴力方法:逐个位置比对. KMP:让前面的,指导后面. 概念建设: d的最长前缀与最长后缀的匹配长度为3.(前缀不能到最后一 ...

  9. [LeetCode] 214. Shortest Palindrome 最短回文串

    Given a string s, you are allowed to convert it to a palindrome by adding characters in front of it. ...

随机推荐

  1. lamda和匿名内部类

    匿名内部类 匿名内部类在日常编程中还是经常会使用的.比如 ArrayList<String> list=new ArrayList<>(); list.add(new Stri ...

  2. 使用webpack命令打包时,报错TypeError: Cannot read property 'presetToOptions' of undefined的解决办法

    我只安装了webpack,没有安装webpack-cli,第一次输入webpack打包时,提示 One CLI for webpack must be installed. These are rec ...

  3. Java多线程编程(五)定时器Timer

    一.定时器Timer的使用 在JDK库中Timer类主要负责计划任务的功能,也就是在指定的时间开始执行某一个任务.Timer类的主要作用就是设置计划任务,但封装任务的类确实TimerTask类,执行计 ...

  4. Mysql数据库(十一)事务与锁机制

    一.事务机制 1.事务的概念 事务是指一组互相依赖的操作单元的集合,用来保证对数据库的正确修改,保持数据的完整性,如果一个事务的某个单元操作失败,将取消本次事务的全部操作. 比如将A账户的资金转入B账 ...

  5. unity 内置shader

    几个有用的Unity 内置shader: (一)Standard RenderingMode:Opaque为实体渲染,更改Color的透明通道不会有影响:Cutout会把图片的透明通道显示出来,非严格 ...

  6. django-模板之comment标签(六)

    index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...

  7. MySQL的sleep函数的特殊特现象

      MySQL中的系统函数sleep,实际应用的场景不多,一般用来做实验测试,昨天在测试的时候,意外发现sleep函数的一个特殊现象.如果在查询语句中使用sleep函数,那么休眠的时间跟返回的记录有关 ...

  8. Java零基础入门面向对象之多态

    多态: 多态的概念:一种事物的多种形态:允许不同类的对象对同一消息做出不同的响应 多态的前提:继承,重写:向上转型(父类引用指向子类对象) 多态的作用:提高代码的可用性:降低模块之间的耦合度 多态分类 ...

  9. CSPS模拟 68

    令人kuku的一场考试, T1 令人kuku的贪心,反工了好几次,耗费了1h之久. T2 令人kuku的数据结构,到死也没调出来,还是细节问题,要积累. T3 令人kuku的二分答案. 先二分第一个答 ...

  10. NOIP模拟 37

    啊哈这次没什么智障低错丢rank什么的托词了STO 发现好像110我就拿满了.. 水平不行..只会简单题qaq T1 可以树上启发式合并水过(普通分治也行) T2 我连那么显然的 一劳永逸的容斥都没想 ...