zoukankan      html  css  js  c++  java
  • 求解最大回文子字符串

    //原题来自LeetCode

    给定一个字符串,返回其中最长的回文子字符串

    这道题目前目前受限于能力,暂时只能通过最暴力的解法来求得其解,即遍历子字符串,找出满足条件的解。下面是未曾优化过的代码,超出了时间限制的,囧(96 / 103 个通过测试用例

    import java.util.ArrayList;
    import java.util.List;
    
    public class solution {
        public String longestPalindrome(String s) {
            String result = null;
            if(isPalindrome(s))
            {
                return s;
            }
            List<String> res = new ArrayList<String>();//直接用一个list容器,把所有满足条件的结果通通扔进去
            int index = s.length(); 
            int length = 0;
            for(int i = 0;i <= index; i++)
            {
                for(int j = index; j >= i; j--)
                {
                    String temp = s.substring(i, j);
                    if(isPalindrome(temp))
                    {
                        res.add(temp);
                    }
                }
            }
            
            for(String str : res)
            {
                if(str.length() >= length)
                {
                    length = str.length();
                    result = str;
                }
            }
            return result;
        }
    
        public boolean isPalindrome(String s)
        {
            int len = s.length();
            for(int i = 0; i < len / 2; i++)
            {
                if(s.charAt(i) != s.charAt(len-1-i))
                {
                    return false;
                }
            }
            return true;
        }
    }

    这个思路很直接,不过就是要经过几次遍历,耗时太久,只能在此基础上进行优化:

    import java.util.ArrayList;
    import java.util.List;
    
    public class solution {
        public String longestPalindrome(String s) {
            String result = "";
            if(isPalindrome(s))
            {
                return s;
            }
            int index = s.length(); 
            int length = 0;
            for(int i = 0;i <= index; i++)
            {
                for(int j = index; j >= i; j--)
                {
                    String temp = s.substring(i, j);
                    if(isPalindrome(temp)&& temp.length() > length)
                    {
                        length = temp.length();
                        result = temp;
                        break; //在此跳出循环的原因是我从字符串的最末端开始遍历,遇到的第一个满足条件的,长度肯定是最长的
                    }
    //在剩余的字符串的长度比目前的result要短时也不用比较了,即使有回文串,长度也不会比当前的result要长
    if(j - i >= length) { break; } } } return result; } public boolean isPalindrome(String s) { int len = s.length(); for(int i = 0; i < len / 2; i++) { if(s.charAt(i) != s.charAt(len-1-i)) { return false; } } return true; } }

    这个目前还真的没有想到其他巧妙的解法,只能日后求助大神再作优化。

  • 相关阅读:
    ActiveMQ学习(四)——应用程序接口
    ActiveMQ学习(三)——MQ的通讯模式
    ActiveMQ学习(二)——MQ的工作原理
    ActiveMQ学习(一)——MQ的基本概念
    java获取对象属性类型、属性名称、属性值 【转】
    Java方法的参数是按值传递的.【转】
    Jquery 操作 select
    JQuery中根据属性或属性值获得元素
    XML 标记使用的特殊字符对应内置实体
    创建DBLink语句
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/11306095.html
Copyright © 2011-2022 走看看