最长回文子串
来源:互联网 发布:网络连接线 编辑:程序博客网 时间:2024/05/09 05:06
中心法求最长回文子串
还有一个更简单的方法可以使用O(N^2)时间、不需要额外的空间求最长回文子串。我们知道回文字符串是以字符串中心对称的,如abba以及aba等。一个更好的办法是从中间开始判断,因为回文字符串以字符串中心对称。一个长度为N的字符串可能的对称中心有2N-1个,至于这里为什么是2N-1而不是N个,是因为可能对称的点可能是两个字符之间,比如abba的对称点就是第一个字母b和第二个字母b的中间。因此可以依次对2N-1个中心点进行判断,求出最长的回文字符串即可。根据该思路可以写出下面的代码。
- string expandAroundCenter(string s,int L, int r)
- {
- int n = s.length();
- while (L>=0 && r<=n-1 && s[L]==s[r]) {
- L--; r++;
- }
- return s.substr(L+1, r-L-1); //返回以L+1为起点长度为r-L-1的字符串
- }
- string longestPalindrome3(string s)
- {
- int n = s.length();
- if (n == 0) return "";
- string longest = s.substr(0, 1);
- for (int i=0; i<n; i++) {
- string p1 = expandAroundCenter(s, i, i);
- //以位置i为中心的最长回文字符串考虑字符串长度为奇数的情况
- if (p1.length() > longest.length())
- longest = p1;
- string p2 = expandAroundCenter(s, i, i+1);
- //以i和i+1之间的位置为中心的最长回文字符串考虑字符串长度为偶数的情况
- if (p2.length() > longest.length())
- longest = p2;
- }
- return longest;
- }
0 0
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- 最长回文子串
- Stack and Heap Objects in Objective-C
- UIGestureRecognizer使用
- T-SQL入門攻略之9-创建与查看数据库
- centos6.5 搭建nginx1.6.0 +gridfs +mongodb2.4..10环境
- BMP图像文件格式
- 最长回文子串
- T-SQL入門攻略之10-修改数据库alter database
- Hadoop学习之MapReduce(一)
- Android_通过传感器抓小偷
- 在python中执行shell命令,并以字符串形式返回命令执行结果
- 衬托您优雅气质的皮鞋
- 不同地域的禁忌事项
- iOS动画效果
- JavaScript 避免同步地调用异步函数的回调函数