什麼是回文?就是正着的字元串和反着的字元串是一樣的。比如“aba”,比如“owekkewo”。
這個算法在leetcode上判定時間過長,而沒通過,先記錄一下吧,後面想想怎麼改善。
public class Solution {
private Object object;
public String longestPalindrome(String s) {
String s1;
start = SystemClock.currentThreadTimeMillis();
if (s.isEmpty()) {
return null;
} else if (s.length() == ) {
return s;
} else {
ArrayList<String> arrayList = new ArrayList<>();
for (int i = ; i < s.length(); i++) {
//從前往後,逐個字母
String substring1 = s.substring(i, i + );
for (int j = i + ; j < s.length(); j++) {
//從前往後,逐個字母
String substring2 = s.substring(j, j + );
//若有比對,進入
if (substring1.contentEquals(substring2)) {
//原始子字元串
String substring = s.substring(i, j + );
// //子字元串的反轉字元串
// String reverse = process(s.substring(i, j + 1));
if (process(s.substring(i, j + ))) {
//比對子字元串的長度
int length = substring.length();
//如果arraylist是空的
if (arrayList.isEmpty()) {
//儲存
arrayList.add(substring);
} else if (arrayList.get().length() <= substring.length()) {
arrayList.remove();
arrayList.add(substring);
}
}
// //如果正反相等
// if (reverse.contentEquals(substring)) {
// //比對子字元串的長度
// int length = substring.length();
//
// //如果arraylist是空的
// if (arrayList.isEmpty()) {
// //儲存
// arrayList.add(substring);
// } else if (arrayList.get(0).length() <= substring.length()) {
// arrayList.remove(0);
// arrayList.add(substring);
// }
// }
}
}
}
if (arrayList.isEmpty()) {
return s.substring(, );
} else {
return arrayList.get();
}
}
}
public boolean process(String subString) {
for (int i = subString.length(); i > ; i--) {
String reverse = subString.substring(i - , i);
String negative = subString.substring(subString.length() - i, subString.length() - i + );
if (!negative.contentEquals(reverse)) {
return false;
}
}
return true;
}
}