字符串中找回文串
public class solution7 {
/*给定一个字符串s,找出s中最长的回文串,你可以建设s的最大长度为1000*/
/*在我博客的求最长回文串求的是长度 这个是要求出最长的回文串的具体*/
/*输入babad
* 输出bab
* 注意:aba也是一个有效答案
*
*
*
* cbbd
* bb*/
// 思路 以某个元素为中心,分别计算偶数长度的回文串最大长度和奇数长度的回文串的最大长度
//中心点 扩张
/*奇数中间一个字符串元素向两边找*/
/*偶数中间两个字符串元素向两边找*/
//定义最长回文串的 起点 和长度
//没有返回值的函数就是为了给上面变量赋值
private int index,len;
//传入一个String s
public String longestPalindrome(String s){
if(s.length()<2){
return s;
}
//把所有元素全部遍历完
for (int i = 0; i <s.length()-1 ; i++) {
//奇数个从中心点扩张
PalindromeHelper(s,i,i);
//偶数个 从两边扩张 如果i 都!= i+1就谈不上回文了
PalindromeHelper(s,i,i+1);
}
/*substring() 方法返回的子串包括 开始 处的字符,但不包括 结束 处的字符。*/
return s.substring(index,index+len);
}
//传入一个字符串,定义两个变量 传入的是字符串的索引 l表示左 r表示右边
private void PalindromeHelper(String s,int l,int r){
//首先判断他们的中心点是不是相等
while (l>=0&&r<s.length()&&s.charAt(l)==s.charAt(r))
{
//中心点并不是从中心开始 而是从元素0开始 依次到字符串的最后一个元素。
l--; //l向左走
r++; //r右边走
}
if(len<r-l-1){
//将会重置全局变量
index=l+1;
//回文串的长度就是r-l-1
len=r-l-1;
}
}
public static void main(String[] args) {
//他的字符是一个一个的验证打印,而不是全部一起打印出来的
String s="aba";
/*String substring = s.substring(0,3);*/
/* System.out.println(substring);*/
solution7 solution7 = new solution7();
String s1 = solution7.longestPalindrome(s);
System.out.println(s1);
}
}