版权声明:本文为博主原创文章,未经博主允许不得转载。 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向两边扩展。
思路使用的题目,核心点从字符串中间向两边的走的实现。
最后还是想说,没有不会,还是做得太少见的太少