zoukankan      html  css  js  c++  java
  • [leetcode 5]longest palindromic substring

    1 题目:

    Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

    Hide Tags
     String
    2 思路
    开始我想了一种思路,对于那个特例输入:

    aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaabcaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa

    时间超了,我也没想出其他的办法。

    后来看这个帖子:https://leetcode.com/discuss/17622/optimized-n-square-solution-in-java

    它是采用了贪心法。里面解释也很详细,不再说了。

    自己动手敲了一遍,实现了。

     
    3 代码
     
    最开始我的代码,时间超了
    public class Solution {
        public String longestPalindrome(String s){
            int end = s.length() - 1;
            int length = end + 1;
            String longestSubString = "";
            for (int i = 0; i < length; i++) {
                int start = i;
                int rear = end;
                int temp = rear;
                while( start < rear ){
                    if (s.charAt(start) == s.charAt(rear)) {
                        start++;
                        rear--;
                    }else {
                        start = i;
                        temp--;
                        rear = temp;
                    }
                    
                    if (start >= rear) {//结束了
                        if (longestSubString.length() < s.substring(i, temp + 1).length()) {
                            longestSubString = s.substring(i, temp+1);
                        }
                        if(longestSubString.length() == s.substring(i,end+1).length()){
                            return longestSubString;
                        }
                    }
                
                }
            }
            
            return longestSubString;
        }
    }

    看懂别人代码后,自己实现的:

    public class Solution {
        public String longestPalindrome(String s){
            char[] chars = s.toCharArray();
            int len = s.length();
            
            while(len >= 0){
                for(int i = 0; i + len - 1 < chars.length; i++){
                    int right = i;
                    int left = i + len - 1;
                    
                    boolean isPalin = true;
                    while(right <= left){
                        if(chars[right] == chars[left]){
                            right++;
                            left--;
                            continue;
                        }else{
                            isPalin = false;
                            break;
                        }
                    }
                    if(isPalin){
                        return s.substring(i, i + len);
                    }
                }
                len--;
            }
            
            return "";
        }
    }
  • 相关阅读:
    ajax函数说明
    rem移动端适配
    使用微信打开网页,弹出软键盘时遇到的兼容问题
    jquery
    今天才发现博客园加密了的文章其实还是能看到的,我tm哪里还敢在这上面写东西,吓死爹了。
    Solr的原理及在项目中的使用实例
    Lucene入门
    oracle包package的使用
    oracle自定义split分割函数
    Zookeeper到底是干嘛的
  • 原文地址:https://www.cnblogs.com/lingtingvfengsheng/p/4554630.html
Copyright © 2011-2022 走看看