5. 最长回文子串【测试岗常见算法题】

题目

5. 最长回文子串---频率5次
找到 s 中最长的回文子串。
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
输入:s = "a"
输出:"a"
输入:s = "cbbd"
输出:"bb"
输入:s = "ac"
输出:"a"

思路

双指针

查找回文字符串的 都是从中间往两端进行遍历,并且要考虑字符串的奇数或者偶数。
遍历字符串S,分别以s[i] 为中心查找回文(此时把S当做奇数字符串) 和 s[i] ,s[i+1] 为中心查找回文(此时把S当做偶数字符串)
然后取结果最大值即可。


class Solution {
    public String longestPalindrome(String s) {
        //找回文子串-从中间往2端查找,返回回文字符串
        //根据奇数、根据中间节点。偶数根据中间和中间+1节点。
        String ret = "";
        for (int i = 0; i < s.length(); i++) {
            if(longestPalindrome(i,i,s).length()>ret.length()){
                ret = longestPalindrome(i,i,s);
            }
            if(longestPalindrome(i,i+1,s).length()>ret.length()){
                ret = longestPalindrome(i,i+1,s);
            }
        }
        return ret;
    }

    public String longestPalindrome(int index1, int index2, String s) {
        //根据index1,index2往2端查找回文字符串
        int start = index1;
        int end = index2;
        while (start>=0 && end<s.length()){
            if(s.charAt(start) == s.charAt(end)){
                start--;
                end++;
            }else {
                break;
            }
        }
        return s.substring(start+1,end);
    }

}
posted @ 2021-04-13 18:03  火颜  阅读(71)  评论(0)    收藏  举报