leetcode题目
分析
两个指针从候选回文子串的中点开始向两边扩散
有两种情况:回文子串长度为奇数,中点指向一个字符。长度为偶数,中点指向两个字符中间。
1.中点指向一个字符
2.中点指向两个字符中间
package com.company.test1;public class Test5 {public static void main(String[] args) {String s="ac";// 中点指的是回文子串的中点
// 有两种情况:回文子串长度为奇数,中点指向一个字符。长度为偶数,中点指向两个字符中间。
// 1.中点指向一个字符int max=0;int begin=0,end=0;int maxBegin=0,maxEnd=0;char[] arr = s.toCharArray();if(arr.length==1){System.out.println(s);}else if(s.length()==2){if(arr[0]==arr[1]){System.out.println(s);}else{System.out.println(arr[0]+"");}}for (int i = 1; i < arr.length-1; i++) {int len=1;int j=1;for ( ; i+j<arr.length&&i-j>=0; j++) {if(arr[i-j]==arr[i+j]){len+=2;}else{break;}}System.out.println((i-j+1)+","+(i+j-1));System.out.println("------------");
// System.out.println(len);if(len>max){max=len;maxBegin=i-j+1;maxEnd=i+j-1;}}
// System.out.println(arr[maxBegin]+","+arr[maxEnd]);System.out.println(maxBegin+","+maxEnd);// 2.中点指向两个字符中间
// double i=3.5;for (double i = 0.5; i <arr.length-1 ; i++) {System.out.println(i);int len=1;double j = 0.5;for (; i+j<arr.length&&i-j>=0 ; j++) {System.out.println(arr[(int)(i-j)]+","+arr[(int)(i+j)]);if(arr[(int)(i-j)]==arr[(int)(i+j)]){len+=2;}else{break;}}if(len>max){max=len;maxBegin=(int)(i-j)+1;maxEnd=(int)(i+j)-1;}}System.out.println(arr[maxBegin]+","+arr[maxEnd]);StringBuilder builder=new StringBuilder();for (int i = maxBegin; i <=maxEnd ; i++) {builder.append(arr[i]);}System.out.println(builder.toString());System.out.println(maxBegin+","+maxEnd);}
}
先在b站上学习算法入门视频,然后再做此类题目会更加容易。