构造回文-C++实现
腾讯2017暑期实习生招聘笔试题……做了一个世纪才做出来
//腾讯2017暑期实习生招聘第一道题。做了一个世纪才做出来………………太菜了 /**
题目:
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢?
输出需要删除的字符个数。 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s.length<=1000. 输出描述: 对于每组数据,输出一个整数,代表最少需要删除的字符个数。 输入例子:
abcda
google 输出例子:
2
2
*/ /*
看牛客网上的一个解题思路是:
比较简单的想法就是求原字符串和其反串的最大公共子串的长度,然后用原字符串的长度减去这个最大公共子串的长度就得到了最小编辑长度。(注:最大公共子串并不一定要连续的,只要保证出现次序一致即可看作公共子串)
可以使用 Needleman/Wunsch算法 牺牲内存换取简单的代码和CPU时间。
算法解释可以参考博主“万仓一黍”总结的博文
http://www.cnblogs.com/grenet/archive/2010/06/03/1750454.html 于是去学习动态规划,和文本比较算法。然后回来做这个题。也是出了各种问题。
慢慢学习提高吧
*/ #include<stdio.h>
#include<string.h> //这里如果不是string.h而是string的话在VC6.0是可以编译通过的,但是在牛客网的oj平台不能通过。加上.h就好了
#include<iostream>
#define N 1000 //这个函数本来是为了获得字符串的倒序,但是因为空间不够了,所以没有使用
void reverse(char s1[], char s2[]){
s2[strlen(s1)] = '\0';
for(int i=;i<strlen(s1);i++){
s2[i] = s1[strlen(s1)--i];
}
} int max(int a, int b, int c){
return (a>b?a:b)>c?(a>b?a:b):c;
} int find(char s[]){
int count[][N];
//int count[N][N]; //原来是定义了一个N*N维的数组来存储动态规划的计算数组,但是使用空间太大,于是只使用了2*N维的数据。即只存储上一次的结果
int len = strlen(s);
int i,j;
for(i=;i<len+;i++){
//count[i][0] = count[0][i] =0;
count[][i] = ;
} count[][] = ;
//char s0[N];
//reverse(s,s0);
for(i=;i<len+;i++){
for(j=;j<len+;j++){
if(s[i-] == s[len-j]){ //这里原来写的是s[i]==s[len-j-1],然后出现各种问题。有许多用例通不过
count[][j] = count[][j-]+;
} else {
count[][j] = max(count[][j-],count[][j-],count[][j]);
}
}
for(j=;j<len+;j++){
count[][j] = count[][j];
}
} return (len-count[][len]);
} int main(){
char s[N];
while(scanf("%s",s)!=EOF){
int result = find(s);
printf("%d\n",result);
}
return ;
}
构造回文-C++实现的更多相关文章
- USACO Prime Palindromes 构造回文数
这道题目一点也不卡素数的判断 就是朴素的sqrt(n) 也不卡 所以~放心的用吧. 构造回文的时候看了HINT 其中是这么写的: Generate palindromes by combining d ...
- 腾讯笔试题 构造回文(LCS问题)
给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串.如何删除才能使得回文串最长呢? 输出需要删除的字符个数. 输入描述: 输入数据有多组,每组包含一个字符串s,且保证:1<=s. ...
- codeforces 486C Palindrome Transformation 贪心求构造回文
点击打开链接 C. Palindrome Transformation time limit per test 1 second memory limit per test 256 megabytes ...
- 算法编程题积累(3)——腾讯笔试"构造回文“问题
首先理解题意,回文串的特点:倒序后跟原串相同.故而可以将原串看成向一个回文串在任意位置添加任意字符后形成的字符串,也就是说原串中存在一段未必连续的回文序列. 通过分析可以知道AC本题的核心思路:求出回 ...
- POJ2402 Palindrome Numbers 回文数
题目链接: http://poj.org/problem?id=2402 题目大意就是让你找到第n个回文数是什么. 第一个思路当然是一个一个地构造回文数直到找到第n个回文数为止(也许大部分人一开始都是 ...
- [swustoj 371] 回文数
回文数(0371) 问题描述 一个自然数如果把所有数字倒过来以后和原来的一样,那么我们称它为回文数.例如151和753357.我们可以把所有回文数从小到大排成一排:1, 2, 3, 4, 5, 6, ...
- 2014-2015 ACM-ICPC, Asia Xian Regional Contest G The Problem to Slow Down You 回文树
The Problem to Slow Down You Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjud ...
- LeetCode5. Longest Palindromic Substring 最长回文子串 4种方法
题目链接:https://leetcode.com/problems/longest-palindromic-substring/ 题意很简单,就是求一个字符串得最长子串,这里的子串指连续的. 本文给 ...
- bzoj千题计划305:bzoj2565: 最长双回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=2565 正着构造回文自动机 倒过来再构造一个回文自动机 分别求出以位置i开始的和结尾的最长回文串 # ...
随机推荐
- 如何在64位WIN7旗舰版下安装SQL2000
1>找到安装包下面的“DEVELOPER”或“ENTERPRISE”等下的X86\SETUP下的“SETUPSQL.EXE”,在安装前右键单击这个文 件, 1.1 打开“兼容性”标签,兼容模式选 ...
- 在探http请求
参考:https://itbilu.com/other/relate/Ny2IWC3N-.html Cookie和Session都是为了解决HTTP协议的无状态问题,存储HTTP通讯中客户端与服务器之 ...
- Ubuntu12.04下搭建Java环境
1.认识需要配置的环境变量 1). PATH: 作用是指定命令搜索路径,打开/etc/environment可以看到PATH变量的值,该变量包含了一系列的路径.那些路径都是一些经常使用的系统命令的目录 ...
- OSGi 系列(十二)之 Http Service
OSGi 系列(十二)之 Http Service 1. 原始的 HttpService (1) 新建 web-osgi 工程,目录结构如下: (2) HomeServlet package com. ...
- 2018.08.16 POJ1183反正切函数的应用(简单数学)
传送门 代数变形一波. 显然有b,c>a. 那么这样的话可以令b=a+m,c=a+n. 又有a=(bc-1)/(b+c). 带入展开可知m*n=a*a+1. 要让m+n最小只需让m最大,这个结论 ...
- 2018.07.25 bzoj3878: [Ahoi2014&Jsoi2014]奇怪的计算器(线段树)
传送门 线段树综合. 让我想起一道叫做siano" role="presentation" style="position: relative;"&g ...
- 1024 Hello World
哈哈,原来今天是程序员的节日啊,快乐咯,可是今天好冷好冷~~
- UVa 10881 Piotr's Ants (等价变换)
题意:一个长度为L的木棍上有n个蚂蚁,每只蚂蚁要么向左,要么向右,速度为1,当两只蚂蚁相撞时, 它们同时掉头.给定每只蚂蚁初始位置和朝向,问T秒后,每只蚂蚁的状态. 析:刚看到这个题时,一点思路也没有 ...
- webuploader传递参数
实际开发过程中,比如我有个工单提交系统,提交工单的时候用webuploader上传图片,如果工单的ID是自增长类型的,那么我在上传图片的时候肯定需要关联上工单的id,这时候就需要通过webupload ...
- cxf maven依赖
<dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-front ...