LeetCode---5. Longest Palindromic Substring(最长回文子串)
2016-09-14 21:27
597 查看
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.
Subscribe to see which companies asked this question
Manacher算法:
时间超时:
Subscribe to see which companies asked this question
public class Solution{ public String longestPalindrome(String s) { if (s.isEmpty()) { return null; } if (s.length() == 1) { return s; } String longest = s.substring(0, 1); for (int i = 0; i < s.length(); i++) { // get longest palindrome with center of i String tmp = helper(s, i, i); if (tmp.length() > longest.length()) { longest = tmp; } // get longest palindrome with center of i, i+1 tmp = helper(s, i, i + 1); if (tmp.length() > longest.length()) { longest = tmp; } } return longest; }
public String helper(String s, int begin, int end) { <span style="white-space:pre"> </span>while (begin >= 0 && end <= s.length() - 1 && s.charAt(begin) == s.charAt(end)) { <span style="white-space:pre"> </span>begin--; <span style="white-space:pre"> </span>end++; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>return s.substring(begin + 1, end); }
Manacher算法:
时间超时:
public class Solution { public String longestPalindrome(String s) { int id=1;//回文中心, int[] r;//记录以i为中心的最大半径 int mx=1;//记录最大回文边界 String ss="$#"; //1.奇偶性处理 for(int i=0;i<s.length();i++){ ss+=s.charAt(i); ss+="#"; } //2. int max=0,ii=0; r=new int[ss.length()]; for(int i=1;i<ss.length();i++){ if(i<mx){r[i]=Math.min(r[2*id-i], mx-i);}else{r[i]=1;} //算法核心 try{while(ss.charAt(i-r[i])==ss.charAt(i+r[i])){r[i]++;}} catch(Exception e){} if(r[i]+i>mx){mx=r[i]+i;id=i;} if(r[i]>max){max=r[i];ii=i;} } //3.找出最大的半径 ss=ss.substring(ii-max+1, ii+max); String sss=""; for(int i=0;i<ss.length();i++){ if(ss.charAt(i)!='#'){sss+=ss.charAt(i);} } return sss; } }
相关文章推荐
- LeetCode_5---Longest Palindromic Substring (求最长回文子串)
- 求最长回文子串 - leetcode 5. Longest Palindromic Substring
- 【LeetCode刷题】最长回文子串Longest Palindromic Substring(java)
- LeetCode题库解答与分析——#5.最长回文子串LongestPalindromicSubstring
- Longest Palindromic Substring 在一个字符串里找最长回文子串@LeetCode
- leetcode-5. Longest Palindromic Substring(寻找最长回文子串)
- leetcode (5) - Longest Palindromic Substring 最长回文子串
- LeetCode:5_Longest Palindromic Substring | 最长的回文子串 | Medium
- LeetCode-Longest Palindromic Substring-最长回文子串-Manacher
- Longest Palindromic Substring [LeetCode] 最长回文子串
- 最长回文子串-LeetCode 5 Longest Palindromic Substring
- 【LeetCode】Longest Palindromic Substring && 【九度】题目1528:最长回文子串(腾讯2013年实习生招聘二面面试题)
- LeetCodeOJ_5_m_Longest Palindromic Substring(最长回文子串)
- LeetCode:Longest Palindromic Substring 最长回文子串
- 【LeetCode-面试算法经典-Java实现】【005-Longest Palindromic Substring(最长回文子串)】
- leetcode--Longest Palindromic Substring--最长回文子串--
- LeetCode 5. Longest Palindromic Substring(最长回文子串)
- leetcode Longest Palindromic Substring最长回文子串
- [C++]LeetCode 5: Longest Palindromic Substring(最长回文子串)
- LeetCode-5 Longest Palindromic Substring(求最长回文子串)