104 lines
2.5 KiB
Java
104 lines
2.5 KiB
Java
//给你一个字符串 s,找到 s 中最长的回文子串。
|
||
//
|
||
//
|
||
//
|
||
// 示例 1:
|
||
//
|
||
//
|
||
//输入:s = "babad"
|
||
//输出:"bab"
|
||
//解释:"aba" 同样是符合题意的答案。
|
||
//
|
||
//
|
||
// 示例 2:
|
||
//
|
||
//
|
||
//输入:s = "cbbd"
|
||
//输出:"bb"
|
||
//
|
||
//
|
||
// 示例 3:
|
||
//
|
||
//
|
||
//输入:s = "a"
|
||
//输出:"a"
|
||
//
|
||
//
|
||
// 示例 4:
|
||
//
|
||
//
|
||
//输入:s = "ac"
|
||
//输出:"a"
|
||
//
|
||
//
|
||
//
|
||
//
|
||
// 提示:
|
||
//
|
||
//
|
||
// 1 <= s.length <= 1000
|
||
// s 仅由数字和英文字母(大写和/或小写)组成
|
||
//
|
||
// Related Topics 字符串 动态规划
|
||
// 👍 3593 👎 0
|
||
|
||
package leetcode.editor.cn;
|
||
|
||
import java.util.Collections;
|
||
|
||
//5:最长回文子串
|
||
public class LongestPalindromicSubstring {
|
||
public static void main(String[] args) {
|
||
//测试代码
|
||
Solution solution = new LongestPalindromicSubstring().new Solution();
|
||
//bab
|
||
System.out.println(solution.longestPalindrome("babad"));
|
||
//bb
|
||
System.out.println(solution.longestPalindrome("cbbd"));
|
||
//a
|
||
System.out.println(solution.longestPalindrome("a"));
|
||
//a
|
||
System.out.println(solution.longestPalindrome("ac"));
|
||
//ccc
|
||
System.out.println(solution.longestPalindrome("ccc"));
|
||
}
|
||
|
||
//力扣代码
|
||
//leetcode submit region begin(Prohibit modification and deletion)
|
||
class Solution {
|
||
public String longestPalindrome(String s) {
|
||
int length = s.length();
|
||
if (length < 2) {
|
||
return s;
|
||
}
|
||
boolean[][] bl = new boolean[length][length];
|
||
for (int i = 0; i < length; i++) {
|
||
bl[i][i] = true;
|
||
}
|
||
int index = 0;
|
||
int max = 1;
|
||
for (int i = 2; i <= length; i++) {
|
||
for (int start = 0; start < length && i + start - 1 < length; start++) {
|
||
int end = i + start - 1;
|
||
if (s.charAt(start) != s.charAt(end)) {
|
||
bl[start][end] = false;
|
||
} else {
|
||
if (i <= 3) {
|
||
bl[start][end] = true;
|
||
} else {
|
||
bl[start][end] = bl[start + 1][end - 1];
|
||
}
|
||
}
|
||
|
||
if (bl[start][end] && i > max) {
|
||
max = i;
|
||
index = start;
|
||
}
|
||
}
|
||
}
|
||
return s.substring(index, index + max);
|
||
}
|
||
}
|
||
//leetcode submit region end(Prohibit modification and deletion)
|
||
|
||
} |