37-回文字符串

内存限制:64MB
时间限制:3000ms
Special Judge: No

accepted:10
submit:17

题目描述:

所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba"。当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串。现在要求你,给你一个字符串,可在任意位置添加字符,最少再添加几个字符,可以使这个字符串成为回文字符串。

输入描述:

第一行给出整数N(0<N<100)
接下来的N行,每行一个字符串,每个字符串长度不超过1000.

输出描述:

每行输出所需添加的最少字符数

样例输入:

复制

1
Ab3bd

样例输出:

2

分析:
  ①、vector字符的插入用的是push_back(c); eg: vec1.push_back(c);
  ②、要求一个串至少加多少个字符成为回文字符串,可以通过将其反转后与原串求lcs(最大公共子串);
  ③、将vector中的字符个数 - lcs即为所求;
  ④、字符串的反转,我们可以通过vector中的reverse
    1、具体用法:reverse(vec1.begin(), vec1.end());
    2、说明,酱紫将会将vec1中的数据从开始到结束的数据全部翻转最终结果复制到vec1中
  
LCS(模板):
 int lcs(vector<char> vec1, vector<char> vec2) // vec2是vec1的反转串
{
memset(dp, , sizeof(vec1));
int len1 = vec1.size(), len2 = vec2.size(); // 当然这里的len1与len2是相等的
for(int i = ; i <= len1; ++ i)
{
for(int j = ; j <= len2; ++ j)
{
if(vec1[i-] == vec2[j-])
dp[i][j] = dp[i-][j-] + ; // 用dp[i][j]来村vec1的前i - 1个串与vec2的前j - 1个串的最大公共子串
else
dp[i][j] = max(dp[i-][j], dp[i][j-]);
}
}
return dp[len1][len2];
}

C/C++代码实现(AC):

 #include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <stack>
#include <map>
#include <queue>
#include <set> using namespace std;
const int MAXN = ;
int dp[MAXN][MAXN]; int lcf(vector<char> vec1, vector<char> vec2)
{
int len1 = vec1.size(), len2 = vec2.size();
memset(dp, , sizeof(dp));
for(int i = ; i <= len1; ++ i)
{
for(int j = ; j <= len2; ++ j)
if(vec1[i-] == vec2[j-]) dp[i][j] = dp[i-][j-] + ;
else dp[i][j] = max(dp[i][j-], dp[i-][j]);
}
return dp[len1][len2];
} int main()
{
int t;
scanf("%d", &t);
while(t --)
{
vector<char> my_vec1, my_vec2;
char s[MAXN];
int len_s;
scanf("%s", s);
len_s = strlen(s);
for(int i = ; i < len_s; ++ i)
my_vec1.push_back(s[i]); // vector类型的数据通过push_back插入数据
my_vec2 = my_vec1;
reverse(my_vec1.begin(), my_vec1.end()); //将数组my_vec1反转
printf("%d\n", my_vec1.size() - lcf(my_vec1, my_vec2));
}
return ;
}

nyoj 37-回文字符串(reverse, 动态规划, lcs)的更多相关文章

  1. [NYOJ 37] 回文字符串

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...

  2. nyoj 37 回文字符串 【DP】

    先反向复制一个新的字符串,然后再找出最长公共子串,在用长度n减去就可以 回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 所谓回文字符串,就是一个字符串,从 ...

  3. NYOJ -37回文字符串

    这道题看了好大会没有思路,上网一搜发现这么简单,但是我为什么就想不到呢,??就是求和它的逆序之后的字符串最长公共子序列,然后用总的长度减去它就行了.原因是是因为只要是在公共子序列里面,那么他就是对称的 ...

  4. nyoj 题目37 回文字符串

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...

  5. nyist oj 37 回文字符串 (动态规划经典)

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描写叙述 所谓回文字符串,就是一个字符串.从左到右读和从右到左读是全然一样的.比方"aba".当 ...

  6. nyoj 37回文串

    述所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当然,我们给你的问题不会再简单到判断一个字符串是不是回文字符串.现在要求你,给你一个字符串,可 ...

  7. 【又见LCS】NYOJ-37 回文字符串

    [题目链接] 回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba& ...

  8. nyoj 回文字符串

    回文字符串 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 所谓回文字符串,就是一个字符串,从左到右读和从右到左读是完全一样的,比如"aba".当 ...

  9. 51Nod - 1092 回文字符串(添加删除字符LCS变形)

    回文字符串 回文串是指aba.abba.cccbccc.aaaa这种左右对称的字符串.每个字符串都可以通过向中间添加一些字符,使之变为回文字符串. 例如:abbc 添加2个字符可以变为 acbbca, ...

随机推荐

  1. PMP涉及的几个工作系统

    PMP涉及的几个工作系统   工作系统作为事业环境因素,提高或限制项目管理的灵活性,并可能对项目结果产生积极或消极影响,包括项目管理系统.项目管理信息系统PMIS.配置管理系统.变更控制系统.合同变更 ...

  2. 第六版PMBOK中工具与技术的介绍:数据收集数据分析数据表现

    数据收集技术: 1.头脑风暴:收集关于项目方法的创意和解决方案.2.焦点小组:召集预定的相关方和主题专家,了解他们对所讨论的产品服务或成果的期望和态度.主持人引导大家互动式讨论.3.访谈:通过与相关方 ...

  3. git 拉取指定的远程分支(三种方式)

    直接拉取 git clone -b ants git@github.com:Ants-double/CareerJava.git git clone -b 远程分支名 仓库地址 本地已经有相关的仓库代 ...

  4. RabbitMQ通过DLX实现消息延迟接收

    1. 创建队列WorkQueue,并把WorkQueue跟exchangeWork绑定:2. 创建队列DLXQueue,并把DLXQueue跟exchangeDLX绑定:a. 设置DLXQueue队列 ...

  5. 远程桌面连接(mstsc)

    目录 1. 序言 2. 准备工作 3. 内网远程连接(以mstsc的方式) 4. 问题---凭据不工作 5. 外网远程连接(mstsc) 6. 结语 更新时间:2019.09.10 1. 序言 有时候 ...

  6. Java 获取前一天的24小时

    //获取凌晨时间 public static Date getTodayStartTime(){ Calendar todayEnd = Calendar.getInstance(); todayEn ...

  7. 详细解读 Spring AOP 面向切面编程(二)

    本文是<详细解读 Spring AOP 面向切面编程(一)>的续集. 在上篇中,我们从写死代码,到使用代理:从编程式 Spring AOP 到声明式 Spring AOP.一切都朝着简单实 ...

  8. 设计模式(五)Singleton模式

    Singleton模式就是确保只生成一个实例的模式.这里有两个意思,即想确保任何情况下都绝对只有一个实例和想在程序上表现出“只存在一个实例”. 下面通过一个实例来说明这种设计模式. package B ...

  9. Mysql数据库(七)触发器

    一.MySQL触发器 触发器是由MySQL的基本命令事件来触发某种特定操作,这些基本的命令由INSERT.UPDATE.DELETE等事件来触发某些特定操作.满足触发器的触发条件时,数据库系统就会自动 ...

  10. 设计模式C++描述----02.模板(Template)模式

    一. 问题 在面向对象系统的分析与设计过程中经常会遇到这样一种情况:对于某一个业务逻辑(算法实现)在不同的对象中有不同的细节实现,但是逻辑(算法)的框架(或通用的应用算法)是相同的.Template提 ...