Leetcode5 最长回文子串

欢迎一起讨论

Geooo的个人博客:https://geooo.gitee.io/geoooblog/

题目描述

给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

实例1

输入: "babad"
输出: "bab"
注意: "aba" 也是一个有效答案。

实例2

输入: "cbbd"
输出: "bb"

解题思路

利用指针思想 (建议先看代码再看解释)

  1. 左右端两边开始定义 i,j将String切成一段子串 ==> s.substring( i , j )
  2. StringBuffer 的 reverse() 方法将切割的子串反转 再toString() 和 equals() 进行比较
  3. 若相等则比较res的字符串,比其长则替换,短则舍弃
  4. continue ==> 若继续比下去得到的子串肯定比该子串短,则直接continue跳到下一次循环查看回文自串
  5. 若不相等则继续循环往下搜索
  6. 循环完return res字符串
    public String longestPalindrome(String s) {
        int start = 0;
        int end = s.length()-1;
        String res = new String("");
        // i指针从 0 开始 (每次 j-- 等于 i 时 i++) 
        for(int i = start; i< s.length();i++){
            //j指针从 String.length()-1 开始
            for(int j = end; j>= i; j--){
                //若 i == j 则将字符转为String substring在i == j时返回""
                String temp = (i == j) ?  String.valueOf( s.charAt(i) ) : s.substring(i,j);
                //字符串反转
                String rev = new StringBuffer(temp).reverse().toString();
                //如果相等
                if(temp.equals(rev)){
                    res = (temp.length() >= res.length()) ? temp : resSb;
                    //跳出循环
                    continue;
                }

            }
        }
        return res;

    }

posted @ 2019-07-31 22:11  Geooo_030  阅读(106)  评论(0编辑  收藏  举报