LeetCode进阶之路(Longest Palindromic Substring)

来源:互联网 发布:营销网络怎么填 编辑:程序博客网 时间:2024/05/23 21:21

想屎的心都有了。。。

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.

求最长回文串。

思路很简单,遍历一个每个字符,然后向两边发散,存在两种情况,一种abcba,还有一种是abba,回文串存入map中,遍历完就去map去长度最大的。可是可是。。。

Time Limit Exceeded 心塞。。。周末找时间另外想法子吧,哎。


public static String longestPalindrome(String ss) { String s = ss.toLowerCase(); Map<Integer,String> map = new HashMap<Integer, String>(); if(s.length() == 1){ return s; }        for(int i = 0;i<s.length()-1;i++) {        String st  = null;        String st2 = null;        for(int j = 1;j<s.length()-i;j++){        if((i-j)>=0 && (i+j)< s.length()&&s.charAt(i-j) == s.charAt(i+j)) {        st = ss.substring(i-j, i+j+1);         } else {        break;        }        }        for(int j = 0;j<s.length()-1-i;j++){        if((i-j)>=0&& (i+j+1)< s.length() &&s.charAt(i-j) == s.charAt(i+j+1)) {        st2 = ss.substring(i-j, i+j+2);         } else {        break;        }        }                if(st != null){        map.put(st.length(), st);        }                if(st2 != null){        map.put(st2.length(), st2);        }                        }        int max = 0;        for (Integer st : map.keySet()) {if(st > max) {max = st;}}                return map.get(max);    }
很晚了,碎觉,这么道题花了差不多一个小时,最后还是没通过,真菜啊。

7月7日修改:
昨天提交的时候一直是time limited Exceeded,今天中午吃饭的时候灵光一闪,发现应该是多了一个for循环,回工位试了一把,果然是,下面是更新版本:
public static String longestPalindrome(String ss) { String s = ss.toLowerCase(); Map<Integer,String> map = new HashMap<Integer, String>(); int max = 0; String st2 = null; if(s.length() == 1){ return s; }        for(int i = 0;i<s.length()-1;i++) {        String st  = null;        for(int j = 1;j<s.length()-i;j++){        if((i-j)>=0 && (i+j)< s.length()&&s.charAt(i-j) == s.charAt(i+j)) {        st = ss.substring(i-j, i+j+1);         } else {        break;        }        if(st.length() > max) {        max = st.length();        st2 = st;        }        }        for(int j = 0;j<s.length()-1-i;j++){        if((i-j)>=0&& (i+j+1)< s.length() &&s.charAt(i-j) == s.charAt(i+j+1)) {        st = ss.substring(i-j, i+j+2);         } else {        break;        }        if(st.length() > max) {        max = st.length();        st2= st;        }        }        }        return st2;    }




0 0
原创粉丝点击