想屎的心都有了。。。
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;
}