版權聲明:本文爲博主原創文章,未經博主允許不得轉載。 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向兩邊擴展。
思路使用的題目,核心點從字符串中間向兩邊的走的實現。
最後還是想說,沒有不會,還是做得太少見的太少