字符串中找回文串

字符串中找回文串

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);
    }
}

总结:subString(开始的索引,结束的索引)结束索引对应的字母是不会打印出来的,超过字符串长度一个,不会出现异常。如何计算他们长度和索引的变化,从中间向左向右如何找到索引变化的规律。奇偶数字符串区分,掌握从中心点扩张的思想。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值