Longest Palindromic Substring
来源:互联网 发布:spss数据分析简单案例 编辑:程序博客网 时间:2024/05/18 03:46
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length ofS is 1000, and there exists one unique longest palindromic substring.
方法1:用两个下标 i 和 j 追踪每个重复子串的左右两边界。
代码如下:
class Solution {public: string longestPalindrome(string s) { int maxLen = 1; int pos = 0; for(int i = 0; i < s.size(); i++) // 长度为奇数的重复子串 { int j = i - 1; int k = i + 1; while(j >= 0 && k < s.size() && s[j] == s[k]) { k++; j--; } if(k - j - 1 > maxLen) { maxLen = k - j - 1; pos = j + 1; } } for(int i = 0; i < s.size(); i++) // 长度为偶数的重复子串 { int j = i; int k = i + 1; while(j >= 0 && k < s.size() && s[j] == s[k]) { k++; j--; } if(k - j - 1 > maxLen) { maxLen = k - j - 1; pos = j + 1; } } return s.substr(pos, maxLen); }};
方法2:动态规划。
代码如下:
class Solution {public: string oddString(string s) // 插入字符使得字符串每个字符都能当成中心向两边扩展 { string ret("^"); for(int i = 0; i < s.size(); i++) { ret += "#" + s.substr(i, 1); } ret += "#$"; return ret; } string longestPalindrome(string s) { string ret = oddString(s); int n = ret.size(); int right = 0, j = 0; int *len = new int[n]; for(int i = 1; i < n - 1; i++) { if(right > i) { len[i] = min(right - i, len[2 * j - i]); } else { len[i] = 0; } while(ret[i - len[i] - 1] == ret[i + len[i] + 1]) { len[i]++; } if(i + len[i] > right) { right = i + len[i]; j = i; } } int maxLen = 0; int pos = 0; for(int i = 1; i < n - 1; i++) { if(len[i] > maxLen) { maxLen = len[i]; pos = i; } } return s.substr((pos - maxLen - 1) / 2, maxLen); }};
0 0
- LeetCode: Longest Palindromic Substring
- LeetCode Longest Palindromic Substring
- LeetCode: Longest Palindromic Substring
- [Leetcode] Longest Palindromic Substring
- Longest Palindromic substring
- [LeetCode] Longest Palindromic Substring
- LeetCode5:Longest Palindromic Substring
- Leetcode : Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode]Longest Palindromic Substring
- leetcode Longest Palindromic Substring
- Longest Palindromic Substring
- LeetCode-Longest Palindromic Substring
- Longest Palindromic Substring
- Longest Palindromic Substring
- [LeetCode] Longest Palindromic Substring
- Longest Palindromic Substring leetcode
- 分治法:归并排序分析
- Java中的匿名内部类
- Linux rpm 命令参数使用详解[介绍和应用]
- java基础1
- 一些总结
- Longest Palindromic Substring
- 如何设置win+R(运行)输入软件名就可以打开相应的软件?
- WCF和WebService的区别?(转载)
- main() 函数详解
- Android初体会(一)之四大组件
- 【图像处理】Python-Image 基本的图像处理操作
- 对于单例的学习总结,包括懒汉式和饿汉式的区别,比较浅显,可能有不足,希望大家多多指教。
- 想成功,每天做一点折磨你的事——读书笔记(一)
- Start learning distributed system