leetcode_最长回文字符串
题目:Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
我的答案:
string longestPalindrome(string s) {int max_len = 0;int start = 0;int len = s.length();//动态创建二维数组bool **p = new bool*[len];for (int i = 0; i<len; i++)p[i] = new bool[len];//初始化动态二维数组for (int i = 0; i<len; i++)for (int j = 0; j<len; j++)p[i][j] = false;//利用动态规划寻找最长的回文字符串//循环判断从下标j到下标i之间的子字符串是否是回文字符串for (int i = 0; i<len; i++)for (int j = i; j>=0; j--){if (i - j<2)p[i][j] = (s[i] == s[j]);else{p[i][j] = (p[i - 1][j + 1] && s[i] == s[j]);}if (p[i][j] && max_len<(i - j + 1)){max_len = i - j + 1;start = j;}}//释放动态二维数组for (int i = 0; i<len; i++){delete[] p[i];p[i] = NULL;}delete[] p;p = NULL;cout << "start=" << start << endl;cout << "max_len=" << max_len << endl;return s.substr(start, max_len);
}
思路解析:可以用动态规划来解题,首先根据题目列出判断字符串s中下标j到下标i之间的子字符串是否是回文字符串的状态转移方程:
然后根据状态转移方程就可以轻松写出代码。
与此题目相同的是寻找字符串中最大的上升字符串,这里以一个无序int序列a为例说明,同样列出判断序列下标j到下标i之间的子序列是否是生长子序列的状态转移方程:
根据这个状态转移方程,可以写出如下求最长上升子序列的代码:
//问题,给定一个无序数列,问最多移动多少次可以实现整个数列的有序
//问题本质:寻找该数列中的最大上升子序列
//函数功能,寻找一个无序数列中的最大上升子序列
void longestss(vector<int>& a, int &start_, int &len_)
{int max_len = 0;int start = 0;int len = a.size();bool **p =new bool* [len];//创建动态二维数组for (int i = 0; i<len; i++)p[i] = new bool[len];//利用动态回归来解决最长子序列问题for (int i = 0; i<len; i++)for (int j = 0; j<len; j++)p[i][j] = false;for (int i = 0; i<len; i++)for (int j = i; j>=0; j--){if ((i - j)<2)p[i][j] = (a[j] <= a[i]);else{p[i][j] = (p[i][j + 1] && (a[j] <= a[j + 1]));}if (p[i][j] && max_len<(i - j + 1)){start = j;max_len = i - j + 1;}}//释放动态二维数组for (int i = 0; i<len; i++){delete[] p[i];p[i] = NULL;}delete[] p;p = NULL;start_ = start;len_ = max_len;
}
最后得到的该无序字符串中的最长的上升子序列是从原序列的下标start_开始,长度为max_len的序列。
leetcode_最长回文字符串相关推荐
- leetCode第五题-求字符串最长回文字符串
原题链接: 最长回文字符串 给你一个字符串 s,找到 s 中最长的回文子串. 示例 1: 输入:s = "babad" 输出:"bab" 解释:"ab ...
- 最长回文字符串——马拉车(Manacher)算法
最长回文字符串--马拉车(Manacher)算法 说来惭愧,都快要毕业了才写第一篇博客... 回文串 回文串呢,就是在一个字符串中,左半部分和右半部分是镜像对称的字符串,比如abcba,就是一个已c为 ...
- jsp判断字符串相等_最长回文字符串三种解法
先解释一下什么是回文字符串,比如说字符串"aba",无论是从先往后读取还是从后往前读取,结果都是一样的.当给定很长的字符串时,如何快速获取到最长的回文字符串,这也是大厂比较常见的算 ...
- Java Longest Palindromic Substring(最长回文字符串)
假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic string.如aba,或者abba.本题是这种,给定输入一个字符串.要求输出一个子串,使得子串是最长的padro ...
- 转载-----Java Longest Palindromic Substring(最长回文字符串)
转载地址:https://www.cnblogs.com/clnchanpin/p/6880322.html 假设一个字符串从左向右写和从右向左写是一样的,这种字符串就叫做palindromic st ...
- [转]最长回文字符串
最长回文串 输入一个字符串,求出其中最长的回文字串.字串的含义是:在原串中连续出现的字符串片段.回文的含义是:正着看和倒着看相同,如aabb和yyxyy,字判断时,应该忽略所有标点符号和空格,且忽略大 ...
- DP之钢管切割,最长回文字符串,最长公共子串
在做LeetCode第3题的时候,用到了DP,但是自己对DP还是不了解,所以翻开算法导论,开始看动态规划喽,学好动态规划,走遍天下都不怕. 钢管切割 对于一根长n米的钢管,每个长度的价格不一样,对于长 ...
- 最长回文字符串(马拉车算法)
Manacher算法 算法总结第三弹 manacher算法,前面讲了两个字符串相算法--kmp和拓展kmp,这次来还是来总结一个字符串算法,manacher算法,我习惯叫他 "马拉车& ...
- CSU 1328 近似回文词【最长回文字符串(三种方法)】
输入一行文本,输出最长近似回文词连续子串.所谓近似回文词是指满足以下条件的字符串: 1. S以字母开头,字母结尾 2. a(S)和b(S)最多有2k个位置不同,其中a(S)是S删除所有非字母字符并且把 ...
最新文章
- TinyML-TVM是如何驯服Tiny的(下)
- CentOS6.5 安装SVN 及http访问
- The request was denied by service delegate (SBMainWorkspace) for reason: Uns
- CTFshow 命令执行 web36
- 爬虫 python 爬取php的网页,带有post参数的网页如何爬取
- hadoop和spark搭建记录
- 信捷伺服刚性调整_信捷電氣(603416):伺服與PLC增長將加速,口罩機解決方案帶來新增量...
- Unbuntu和Centos中部署同时多版本PHP的详细过程
- plsql dev中Dynamic Performance Tables not accessible分析解决(转载)
- LeetCode 1035 不相交的线
- Solr全文检索学习笔记·记录
- 谷粒商城高级篇(39)——认证服务之验证码注册
- LPC2294看门狗定时器
- 产品概念之2/4:三层次理论 —— 生产者主导视角的产品概念
- zbrush是什么软件
- Altium Designer系列:问题之无法打开pcb文件
- python 10个100以内随机整数编辑_Python在小学数学中的应用
- gregorian(格里高力)历转换公历
- 全球及中国医学新生儿筛查解决方案行业专项研究与运营前景调研报告2022版
- 2010年中国十大SNS网站排名(转)