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. STL的vector略解

    本文部分内容参考于这儿. vector 的基础知识,上文已经阐述地很详尽了.笔者谨给出 vector 的声明及其常用函数. 代码抬头需包含 #include<vector> using n ...

  2. POJ 1035 Spell checker(串)

    题目网址:http://poj.org/problem?id=1035 思路: 看到题目第一反应是用LCS ——最长公共子序列 来求解.因为给的字典比较多,最多有1w个,而LCS的算法时间复杂度是O( ...

  3. 百万年薪python之路 -- 面向对象初始

    面向对象初始 1.1 面向过程编程vs函数式编程 函数编程较之面向过程编程最明显的两个特点: 1,减少代码的重用性. 2,增强代码的可读性. 1.2 函数式编程vs面向对象编程 面向对象编程:是一类相 ...

  4. openresty性能测试报告分析

    一.openresty介绍 1.什么是openresty 通过揉和众多设计良好的 Nginx 模块,OpenResty 有效地把 Nginx 服务器转变为一个强大的 Web 应用服务器,基于它开发人员 ...

  5. 彻底解决 Mechanism level: Failed to find any Kerberos tgt

    错误描述 Secure Client Cannot Connect ([Caused by GSSException: No valid credentials provided(Mechanism ...

  6. http和Https简介、详解

    目录 引用 一.HTTP和HTTPS的基本概念 二.HTTP与HTTPS有什么区别? 三.HTTPS的工作原理 四.HTTPS的优点 五.HTTPS的缺点 六.http切换到HTTPS 引用 超文本传 ...

  7. pymysql 防止sql注入案例

    from pymysql import connect def main(): """sql演示""" # 1.输入一个语句,根据id展示相 ...

  8. 第三十四章 POSIX消息队列

    POSIX消息队列相关函数 mq_open 功能: 用来创建和访问一个消息队列 原型: mqd_t mq_open(const char *name, int oflag); //只能用来打开消息队列 ...

  9. 搭建邮件服务器,使用Postfix与Dovecot收发电子邮件

    小知识: 我们为什么要搭建邮件服务器呢?有时候我们处于一个局域网内,不能及时的分享各自的研究成果,迫切的需要一种能够借助于网络且建立在计算机之间的传输数据的方法.所以我们需要搭建邮件服务器,这样的话既 ...

  10. pymssql默认关闭自动模式开启事务行为浅析

    使用Python采集SQL Server数据库服务器磁盘信息时,遇到了一个错误"CONFIG statement cannot be used inside a user transacti ...