字符串处理------最长回文子串
2016-06-20 15:37
411 查看
题目描述:
给定一个字符串,求它的最长回文子串的长度.
方法一:中心扩展法.
由于回文串中,以某个字符为中心的前缀和后缀一定是相同字符。可以利用此方法枚举中心位置,然后进行扩展,从而找到最长回文子串。
给定一个字符串,求它的最长回文子串的长度.
方法一:中心扩展法.
由于回文串中,以某个字符为中心的前缀和后缀一定是相同字符。可以利用此方法枚举中心位置,然后进行扩展,从而找到最长回文子串。
#include <iostream> #include <string> using namepace std; int longestPalindrome(string &str, int len); int begin = 0; //记录回文串开始的位置 int main() { string str; int length; cout << "input a string: " << endl; cin >> str; length = longestPalindrome(str, str.length()); cout << "length: " << length << endl; cout << "longest Palindrome is: "; for(int i = 0; i < length; i++) cout << str[begin + i]; cout << endl; return 0; } int longestPalindrome(string &str, int len) { if(len < 1) return 0; int max = 0, i, j, length = 0; for(i = 0; i < len; i++) { for(j = 0; (i - j >= 0)&&(i + j < len); j++) //处理回文部分长度为奇数 { if(str[i - j] != str[i + j]) break; length = 2 * j + 1; } if(length > max) { begin = i - j + 1; max = length; } for(j = 0; (i - j >= 0)&&(i + j + 1 < len); j++) //处理回文部分长度为偶数 { if(str[i - j] != str[i + j + 1]) break; length = 2 * j + 2; } if(length > max) { begin = i - j + 1; max = length; } } return max; }
相关文章推荐
- 求回文字符串的最小分割
- 最长回文子串
- hihoCoder第一周:求解最大回文串
- KT学算法(三)——最长回文子串与Manacher算法
- 【Leetcode】Valid Palindrome
- Longest Palindromic Substring (最长回文串)【面试算法leetcode】
- leetcode:Palindrome Number (判断数字是否回文串) 【面试算法题】
- leetcode:Palindrome Partitioning (字符串分割成回文串的所有方式) 【面试算法题】
- Palindrome
- Palindrome. Again Palindrome
- 百度武汉站笔试题——算法题第一第二题Java实现
- HDU1282 回文数猜想
- 【最长回文子串】Manache算法,O(N)时间复杂度
- LeetCode 336 Palindrome Pairs(回文串)
- Leetcode || Longest Palindromic Substring
- URAL 1297 Palindrome 后缀数组 或 Manacher 求最长回文子串
- O(n)时间复杂度求最长回文串
- HDU3068 最长回文(Manacher算法)
- 【白书之路】401 - Palindromes 回文串 镜像串
- hdu 3294 Girls' research Manacher回文串