手撕代碼:Java實現LeetCode最長迴文串

版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/youngogo/article/details/81745636

解決最長迴文串,先來看下問題描述

問題描述

迴文串(palindromic string)是指這個字符串無論從左讀還是從右讀,所讀的順序是一樣的;簡而言之,迴文串是左右對稱的。所謂最長迴文子串問題,是指對於一個給定的母串abcdedcb

從所有的爲迴文串的子串a, ded, cdedc, bcdedcb中;找出最長的那一個bcdedcb。但是該如何判斷子串是否迴文然後找出最長者呢?正好Leetcode也有一個5. longest-palindromic-substring問題,大家可以進行測試

public class Huiwenchuan {
	private static int start;
	private static int max;
	
	public static void main(String[] args) {
	Scanner cin = new Scanner(System.in);
	String string = cin.nextLine();
	String str = Huiwen(string);
		System.out.println(str);
	}

	private static String Huiwen(String string) {
		//首先長度判斷	
		if(string.length()<2){
			return string;
		}
		//基本思想是以,其中一個或者兩個字母爲出發點,擴展得到最大的字符串,替換小的
		//第一種情況:abcdedcb,第二種情況:abcdeedcb
		for(int i =0;i<string.length();i++){
			//第一種情況,出發點相同
			gainHui(string,i,i);
			//針對第二種情況,只有一種情況的值使,最大的
			gainHui(string,i,i+1);
		}
		//根據做的標記切割字符串
		String sub = string.substring(start, max);
		return sub;
	}
	//具體計算出迴文,字符串
	private static void gainHui(String string, int i, int j) {
		
		while(i>=0&&j<string.length()&&string.charAt(i)==string.charAt(j)){
			i--;
			j++;
		}
		//做標記,起始和末尾
		if(max<j-i-1){
			start = i+1;
			max = j-i-1;
		}
	}
}

撕完代碼思一思:

利用for循環,從i出發,然後從i向兩邊擴展。

思路使用的題目,核心點從字符串中間向兩邊的走的實現。

最後還是想說,沒有不會,還是做得太少見的太少

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章