可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
来源:互联网 发布:淘宝水族箱品牌排行榜 编辑:程序博客网 时间:2024/05/20 15:57
可转载,请附上原链接
输入:amka时,删除字符m可以得到最长回文字符串aka,则输出3
输入:abcddcka,删除b和k时,acddca是最长回文字符串,输出6
思路:用两个指针,一个指向字符串一个字符,一个指向字符串最后一个字符,
如果两个字符串相等,如abcda,时就进行递归看bcd中的最长回文字符串
如果不想等,就找abcd,和bcda中的最长回文字符串
对于递归的公共子问题,用动态规划解决
程序如下:
#include"stdafx.h"#include<iostream>#include<stdlib.h>#include<stdio.h>using namespace std;int Length_record[1000][1000];int max(int a, int b){return a > b ? a : b;}int number_of_reverse(char* str, int start, int end, int crruentLength, int &max_Length){if (Length_record[start][end] != -1){if (crruentLength + Length_record[start][end] > max_Length)max_Length = crruentLength + Length_record[start][end];return Length_record[start][end];}if (Length_record[start][end] == -1){if (start == end){crruentLength++;if (crruentLength > max_Length)max_Length = crruentLength;Length_record[start][end] = 1;}if (end - start == 1){if (str[start] == str[end]){crruentLength += 2;Length_record[start][end] = 2;}else{crruentLength++;Length_record[start][end] = 1;}if (crruentLength > max_Length)max_Length = crruentLength;}if (end - start > 1){if (str[end] == str[start])Length_record[start][end]=2+number_of_reverse(str, start + 1, end - 1, crruentLength + 2, max_Length);else{Length_record[start][end] =max( number_of_reverse(str, start, end - 1, crruentLength, max_Length), number_of_reverse(str, start + 1, end, crruentLength, max_Length));}}}return Length_record[start][end];}int number_of_delete(char *str){if (str == NULL)cout << "0" << endl;int nLength = strlen(str);int max_Length = 0;number_of_reverse(str, 0, nLength - 1, 0, max_Length);return max_Length;}int main(){memset(Length_record, -1, sizeof(Length_record));char str[1000];cin >> str;int a = number_of_delete(str);cout << a << endl;}
1 0
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- JAVA动态规划(三)--最长回文字符串(可删除中间字符)【腾讯2016实习生笔试题】
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- [2016腾讯暑期实习在线笔试题]最长回文字符串
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 2016腾讯笔试题,删除字符串中的字符,使得剩下的字符串是回文串,如何删除使得回文串最长
- 腾讯2016实习生笔试题--求最长回文字符长度
- [腾讯笔试]求一个字符串删除若干字符可构成一个回文串
- 腾讯 2017 暑假实习生编程题(一):给定一个字符串s,你可以从中删除一些字符,使得剩下的串是一个回文串。如何删除才能使得回文串最长呢? 输出需要删除的字符个数。
- C/C++笔试题之删除字符串中某些字符
- 腾讯2016实习生笔试题 获得最长回文串长度
- 腾讯2016实习笔试题(最长回文子序列)
- 2017百度校园招聘编程题 删除字符构造最长回文字符串(求最长公共子序列的变种)
- 2016年腾讯笔试题之回文字符串
- 腾讯笔试题 构造回文字符串
- 【面试笔试算法】Problem 9: 腾讯2016年研发实习笔试题:最长回文子串
- 删除字符串中某些特定的字符
- 字符串删除字符的回文字符串
- The following classes could not be found: - android.support.v7.internal.app.WindowDecorActionBar
- HDU-1213-How Many Tables(并查集)
- POJ, 3255 Roadblocks(次短路径)
- Java EE中关于配置文件web.xml杂谈一
- bzoj 4436: [Cerc2015]Kernel Knights
- 可删除某些字符的最长回文字符串(2016腾讯在线笔试题)
- jsp中EL表达式
- 网站评论功能数据库设计和开发
- Matlab CV ToolBox的使用之matchFeatures
- 第十一周项目1.1—点 圆 圆柱类族的设计
- swift 学习笔记之闭包
- Docker Swarm入门(三)Swarm SOA举例
- ural 1018-Binary Apple Tree【树状DP】
- How to Install Android in VirtualBox