简介
回文是一个正读和反读都相同的字符串,例如,“aba”,“aba” 是回文,而 “abc”,“abc” 不是
暴利破解
/**
* @author 张景龙
* @version 1.0.0
* @Time
*/
class Solution {
public String longestPalindrome(String s) {
if (s.equals("") || s.length() == 0) {
return s;
}
StringBuilder b = new StringBuilder(s);
String reverseStr = b.reverse().toString();
int StringLength = 0;
String cutStr = null;
for (int i = 0; i < s.length(); i++) {
for (int j = i; j < s.length(); j++) {
if (judgeIndex(s.substring(i, j + 1), reverseStr)) {
if (s.substring(i, j + 1).charAt(s.substring(i, j + 1).length() - 1) == s.substring(i, j + 1).charAt(0)) {
if (s.substring(i, j + 1).length() > StringLength) {
StringLength = s.substring(i, j + 1).length();
cutStr = s.substring(i, j + 1);
}
}
}
}
}
return cutStr;
}
public Boolean judgeIndex(String s1, String s2) {
if (s2.contains(s1)) {
return true;
}
return false;
}
public static void main(String[] args) {
System.out.println(new Solution().longestPalindrome("\"lphbehiapswjudnbcossedgioawodnwdruaaxhbkwrxyzaxygmnjgwysafuqbmtzwdkihbwkrjefrsgjbrycembzzlwhxneiijgzidhngbmxwkhphoctpilgooitqbpjxhwrekiqupmlcvawaiposqttsdgzcsjqrmlgyvkkipfigttahljdhtksrozehkzgshekeaxezrswvtinyouomqybqsrtegwwqhqivgnyehpzrhgzckpnnpvajqevbzeksvbezoqygjtdouecnhpjibmsgmcqcgxwzlzztdneahixxhwwuehfsiqghgeunpxgvavqbqrelnvhnnyqnjqfysfltclzeoaletjfzskzvcdwhlbmwbdkxnyqappjzwlowslwcbbmcxoiqkjaqqwvkybimebapkorhfdzntodhpbhgmsspgkbetmgkqlolsltpulgsmyapgjeswazvhxedqsypejwuzlvegtusjcsoenrcmypexkjxyduohlvkhwbrtzjnarusbouwamazzejhnetfqbidalfomecehfmzqkhndpkxinzkpxvhwargbwvaeqbzdhxzmmeeozxxtzpylohvdwoqocvutcelgdsnmubyeeeufdaoznxpvdiwnkjliqtgcmvhilndcdelpnilszzerdcuokyhcxjuedjielvngarsgxkemvhlzuprywlypxeezaxoqfges\""));
}
}
输入结果
pnnp
中心扩展算法
public String longestPalindrome(String s) {
if (s == null || s.length() < 1) return "";
int start = 0, end = 0;
for (int i = 0; i < s.length(); i++) {
int len1 = Center(s, i, i);
int len2 = Center(s, i, i + 1);
int len = Math.max(len1, len2);
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
return s.substring(start, end + 1);
}
private int Center(String s, int l, int r) {
int L = l, R = r;
while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
L--;
R++;
}
return R - L - 1;
}