手撕代码: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向两边扩展。

思路使用的题目,核心点从字符串中间向两边的走的实现。

最后还是想说,没有不会,还是做得太少见的太少

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