题目描述
- 给你一个字符串 s,找到 s 中最长的回文子串。
- 输入:s = “babad”
- 输出:“bab”
- 解释:“aba” 同样是符合题意的答案。
题目思路:
判断是不是回文串:只需要反转后判断是不是相等
然后求出所有的子串 并 判断是不是回文,返回最大的即可
/** * @author Captain * @date 2021/8/19 9:53 * 给你一个字符串 s,找到 s 中最长的回文子串。 * 输入:s = "babad" * 输出:"bab" * 解释:"aba" 同样是符合题意的答案。 */ public class LongestPalindrome { public static String longestPalindrome(String string) { // 用来装所有的回文子串 ArrayList<String> list = new ArrayList<>(); // 遍历字符串的所有子串 for (int i = 0; i < string.length(); i++) { for (int j = 1; j <= string.length() - i; j++) { String sub = string.substring(i,i+j); // 如果子串长度大于一 && 是回文串 if (sub.length()>1 && isPalindorm(sub)){ list.add(sub); } } } // 定义一个最大回文的长度 int max = 0; for (int i = 0; i < list.size(); i++) { max = Math.max(max,list.get(i).length()); } // 取出最大回文子串 for (int i = 0; i < list.size(); i++) { if (list.get(i).length() == max){ return list.get(i); } } return ""; } // 判断是不是回文串 public static boolean isPalindorm(String s){ StringBuilder sb = new StringBuilder(s); if (sb.reverse().toString().equals(s)){ return true; } return false; } // 主函数测试 public static void main(String[] args) { Scanner sc = new Scanner(System.in); String string = sc.nextLine(); System.out.println(longestPalindrome(string)); } }