[LeetCode]005-Longest Palindromic Substring
2015-12-05 19:29
351 查看
题目:
Solution(1):
//这个就是暴力的方法,对每个子串进行回文判别,耗时很长,最终在LeetCode上也超时了。
Solution(2):
改进的算法,用Manacher算法。非常高效O(n)。
具体可看这个博客:http://blog.csdn.net/xingyeyongheng/article/details/9310555
我的代码:
Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.
Solution(1):
//这个就是暴力的方法,对每个子串进行回文判别,耗时很长,最终在LeetCode上也超时了。
string longestPalindrome(string s) { int max_length = 0; string palindromic_str = ""; if(s.length() == 1) { return s; } for(int i=0;i<s.size()-1;i++) { for(int j =i+1;j<s.size();j++) { string str = s.substr(i,j-i+1); if(IsPalindromic(str)) { if(str.size() > max_length) { palindromic_str = str; max_length = str.size(); } } } } return palindromic_str; } bool IsPalindromic(string str) { for(int i=0;i<str.size()/2;i++) { if(str[i] != str[str.size()-1-i]) { return false; } } return true; }
Solution(2):
改进的算法,用Manacher算法。非常高效O(n)。
具体可看这个博客:http://blog.csdn.net/xingyeyongheng/article/details/9310555
我的代码:
string longestPalindrome(string s) { int n = s.size(); char * pre_induce = new char[2*n+1]; for(int i = 0;i<n;i++) { pre_induce[2*i] = '#'; pre_induce[2*i+1] = s[i]; } pre_induce[2*n] = '#'; int * p = new int[2*n+1]; memset(p,0,(2*n+1)*sizeof(int)); string str = ""; int id = 0; int maxlen = 0; for(int i =1;i<2*n+1;i++) { if(p[id] + id > i) //判断是否在范围内 { p[i] = min(p[2*id - i],p[id]+id -i); } else { p[i] = 1; } while((i-p[i] >=0) && (i+p[i] <= 2*n) && (pre_induce[i+p[i]] == pre_induce[i-p[i]])) { ++p[i]; } if(p[i] + i > p[id] + id) id = i; if(maxlen < p[i]) { maxlen = p[i]-1; int point = (i-maxlen)/2; str = s.substr(point,maxlen); } } delete[] pre_induce; delete[] p; return str; }
相关文章推荐
- javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
- JS中的substring和substr函数的区别说明
- js substr、substring和slice使用说明小记
- js中substring和substr的详细介绍与用法
- javascript indexOf方法、lastIndexOf 方法和substring 方法
- javascript中String类的subString()方法和slice()方法
- sqlserver substring函数使用方法小结
- JavaScript中使用Substring删除字符串最后一个字符
- JavaScript截取字符串的Slice、Substring、Substr函数详解和比较
- 3种js实现string的substring方法
- 浅谈Javascript中substr和substring的区别
- mysql截取的字符串函数substring_index的用法
- js中substr,substring,indexOf,lastIndexOf,split,replace的用法详解
- js substring()字符串截取函数
- Js中的substring,substr与C#中的Substring比较
- js中substring和substr的定义和用法
- JavaScript字符串对象substring方法入门实例(用于截取字符串)
- js中substr,substring,indexOf,lastIndexOf的用法小结
- javascript中substr,substring,slice.splice的区别说明
- 几个常用的JavaScript字符串处理函数 - split()、join()、substring()和indexOf()