5. Longest Palindromic Substring
来源:互联网 发布:同步器软件 编辑:程序博客网 时间:2024/06/06 07:29
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example:
Input: “babad”
Output: “bab”
Note: “aba” is also a valid answer.
Example:
Input: “cbbd”
Output: “bb”
自己写的代码:
参照了: http://blog.csdn.net/hopeztm/article/details/7932245
public class Solution { public char[] preProcess(String s){ int n = s.length(); if(n == 0){ char[] ch1 = new char[2]; ch1[0] = '^'; ch1[1] = '$'; return ch1; }else{ char[] ch2 = new char[n+n+3]; int curIndex = 0; ch2[curIndex++] = '^'; for(int i = 0;i < n; i++){ ch2[curIndex++] = '#'; ch2[curIndex++] = s.charAt(i); } ch2[curIndex++] = '#'; ch2[curIndex++] = '$'; return ch2; } } public String longestPalindrome(String s) { char[] ss = preProcess(s); int n = ss.length; int[] p = new int[n]; int cntrl = 0; int right = 0; for(int i = 1;i < n - 1;i++){ int i_mirror = cntrl + cntrl - i; p[i] = (right > i) ? Math.min(right - i,p[i_mirror]) : 0; while(ss[i + p[i] + 1] == ss[i - p[i] - 1]) p[i]++; if(i + p[i] > right){ cntrl = i; right = i + p[i]; } } int maxLen = 0; int indexOfCntrl = 0; for(int i = 1; i < n - 1;i++){ if(p[i] > maxLen){ maxLen = p[i]; indexOfCntrl = i; } } return s.substring((indexOfCntrl - maxLen - 1)/2,(indexOfCntrl + maxLen - 1)/2); }}
另外还有比这个简介的多的代码:
public class Solution { public String longestPalindrome(String s) { if(s==null){ return ""; } char[] arr = s.toCharArray(); int max = 0; int maxi = 0; int maxj = 0; for(int i = 0; i< arr.length;){ int i1 = getFarestSameElementIndex(arr,i); int dist = getDistance(arr,i,i1); int index1 = i-dist; int index2 = i1 + dist; int l = index2 - index1; if(l>max){ max = l; maxi = index1; maxj = index2; } i = i1+1; } return s.substring(maxi, maxj+1);}private int getDistance(char[] arr,int index1,int index2){ int i1 = index1-1; int i2 = index2+1; int dist = 0; while(i1>=0&&i2<arr.length){ if(arr[i1]==arr[i2]){ dist++; }else{ break; } i1--;i2++; } return dist;}private int getFarestSameElementIndex(char[] arr, int index){ for(int i = index+1;i<arr.length;i++){ if(arr[i]!=arr[index]){ return i-1; } } return arr.length-1;}}
阅读全文
0 0
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5.Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- 5. Longest Palindromic Substring
- Python yield 使用浅析
- hidesBottomBarWhenPushed隐藏底部TabBar时push的VC出现白色遮挡问题
- Focus on Small Steps First, Then Shift to the Larger Goal
- RMQ 的ST算法 【模版】+【知识点】
- Linux 线程同步的三种方法
- 5. Longest Palindromic Substring
- 纯css3实现图片自动切换
- Findbugs工具的使用
- 蓝桥杯 K好数
- 字符编码和python使用encode,decode转换utf-8, gbk, gb2312的问题
- 关于深度学习的一些思考
- java中两种跳出指定循环的方法
- 动态代理模式
- Ajax