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 "";
        }
    }
  • 相关阅读:
    洛谷 P6599 「EZEC-2」异或 题解
    线段树懒标记以及标记永久化的两种实现方法(模板)
    洛谷P3834 【模板】可持久化线段树 1 题解
    Codeforces 1012B Chemical table (思维+二分图)
    HDU 6386 Age of Moyu (最短路+set)
    CodeForces 739B Alyona and a tree (二分+树上差分)
    Codeforces 444C DZY Loves Colors (线段树)
    HDU 5441 Travel (离线dsu)
    Codeforces 1000E We Need More Bosses (边双连通+最长链)
    CodeForces 219D Choosing Capital for Treeland (树形DP)经典
  • 原文地址:https://www.cnblogs.com/lingtingvfengsheng/p/4554630.html
Copyright © 2011-2022 走看看