zoukankan      html  css  js  c++  java
  • 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;
    
        }
    
    
  • 相关阅读:
    Android Camera 使用小结
    Android 调用堆栈跟踪
    读取文件
    Android USB大容量存储时SD卡状态监听(转)
    Setting up PhoneGap on Ubuntu for Android app development
    python单元测试
    python数据库备份
    python多线程多进程
    python面向对象编程和类
    python异常处理及Url编码
  • 原文地址:https://www.cnblogs.com/Geooo/p/11279467.html
Copyright © 2011-2022 走看看