BM73 最长回文子串
描述
对于长度为n的一个字符串A(仅包含数字,大小写英文字母),请设计一个高效算法,计算其中最长回文子串的长度。
数据范围:
要求:空间复杂度 ,时间复杂度
进阶: 空间复杂度 ,时间复杂度
示例1
输入:
返回值:
说明:
Java代码
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
public int getLongestPalindrome (String A) {
// write code here
if (A == null || A.isEmpty()) {
return 0;
}
int len = A.length();
int max = 1;
for (int i = 0; i < len; i++) {
StringBuilder str = new StringBuilder(String.valueOf(A.charAt(i)));
for (int j = i + 1; j < len; j++) {
StringBuilder append = str.append(A.charAt(j));
StringBuilder reverse = new StringBuilder(append);
reverse.reverse();
if (append.toString().contentEquals(reverse)) {
if (append.length() > max) {
max = append.length();
}
}
}
}
return max;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
public int getLongestPalindrome (String A) {
// write code here
int n = A.length();
int max = 1;
for (int i = 0; i < n; i++) {
for (int j = n - 1; j > i ; j--) {
String sub = A.substring(i, j + 1);
StringBuffer a = new StringBuffer(sub).reverse();
if (sub.equals(a.toString())) {
max = Math.max(max, a.length());
}
}
}
return max;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param A string字符串
* @return int整型
*/
public int getLongestPalindrome(String s) {
StringBuilder sb = new StringBuilder(s);
int n = sb.length();
boolean[][] dp = new boolean[n][n];
int res = 1;
for (int i = 0; i < n; i++) {
dp[i][i] = true;
}
for (int j = 1; j < n; j++) {
for (int i = j - 1; i >= 0; i--) {
if (j - i <= 2 && sb.charAt(i) == sb.charAt(j)) {
dp[i][j] = true;
res = Math.max(res, j - i + 1);
} else if (sb.charAt(i) == sb.charAt(j)) {
dp[i][j] = dp[i + 1][j - 1];
if (dp[i][j]) {
res = Math.max(res, j - i + 1);
}
}
}
}
return res;
}
}
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 11.
- 12.
- 13.
- 14.
- 15.
- 16.
- 17.
- 18.
- 19.
- 20.
- 21.
- 22.
- 23.
- 24.
- 25.
- 26.
- 27.
- 28.
- 29.
- 30.
- 31.
- 32.
- 33.
- 34.