LeetCode第五题:Longest Palindromic Substring
Given a string s, find the longest palindromic substring in s. You may assume that the maximum length of s is 1000.
Example 1:
Input: "babad" Output: "bab" Note: "aba" is also a valid answer.
Example 2:
Input: "cbbd" Output: "bb"
题意就是给一个字符串,找到子串中最大的对称字符串。
我的想法就是分为两种情况,奇数情况和偶数,从其中一个字符或者两个字符往前后两个方向进行扫描。
public String longestPalindrome(String s) { String longestPalindrome = ""; for (int i = 0; i < s.length(); i++) { //奇数情况 int pre = i; int next = i; String s1 = getLongestPalindromeByIndex(pre, next, s); //偶数情况 next++; String s2 = getLongestPalindromeByIndex(pre, next, s); s1 = s1.length() > s2.length() ? s1 : s2; longestPalindrome = longestPalindrome.length() >= s1.length() ? longestPalindrome : s1; } return longestPalindrome; } public static String getLongestPalindromeByIndex(int pre, int next, String s) { while (pre >= 0 && next < s.length() && s.charAt(pre) == s.charAt(next)) { pre--; next++; } //当退出循环时,说明当前pre和next不相等,从pre+1截取到next-1 return s.substring(pre + 1, next); }
这个代码有一个问题,就是产生了很多无用的字符串,其实可以将返回值变成start和end也就是开始索引和结束索引,
但是我感觉这样写可读性好一点。