5. 最长回文子串
https://writings.sh/post/algorithm-longest-palindromic-substring
package leetcode; public class demo_5 { public String longestPalindrome(String s) { String str=String.valueOf(s.charAt(0)); String s1=new String(); for(int i=0;i<s.length();i++) { for(int j=i+str.length();j<=s.length();j++) { s1=s.substring(i,j); if(strPalindrome(s1)) { if(s1.length()>str.length()) { str=s1; } } } } return str; } //判断是否为回文字符串 public boolean strPalindrome(String s) { int left=0; int right=s.length()-1; while(left<right) { if(s.charAt(right)!=s.charAt(left)) { return false; } left=left+1; right=right-1; } return true; } public static void main(String[] args) { // TODO Auto-generated method stub String s="babcd"; demo_5 d5=new demo_5(); System.out.println(d5.longestPalindrome(s)); } }
简化版
1 public String longestPalindrome(String s) { 2 int[] range = new int[2]; 3 char[] str =s.toCharArray(); 4 for(int i=0;i<s.length();i++) { 5 int high=i; 6 int low=i; 7 //判断有几个相同的字符 8 while(high<s.length()-1&&str[high+1]==str[low]) { 9 high++; 10 } 11 i=high; 12 //从中间向左右扩散 13 while(low>0&&high<s.length()-1&&str[low-1]==str[high+1]) { 14 low=low-1; 15 high=high+1; 16 } 17 if((high-low)>(range[1]-range[0])) { 18 range[0]=low; 19 range[1]=high; 20 } 21 } 22 return s.substring(range[0],range[1]+1); 23 }
浙公网安备 33010602011771号