LeetCode每日一題:longest palindromic substring

weixin_33976072發表於2017-07-06

問題描述

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

問題分析

我們可以採用遞迴的方式,找每個字元為中心的最長迴文子串,用一個全域性變數(寫程式碼應該儘量避免全域性的變數)來記錄最長迴文子串的起始點和長度,遞迴時要分子串字元數是奇數還是偶數分類討論。

程式碼實現

public String longestPalindrome(String s) {
        if (s.length() < 2) return s;
        for (int i = 0; i < s.length() - 1; i++) {
            findLongestPalindrome(s, i, i);
            findLongestPalindrome(s, i, i + 1);
        }
        return s.substring(startInLongestPalindrome, startInLongestPalindrome + maxLenInLongestPalindrome);
    }

    private void findLongestPalindrome(String s, int i, int j) {
        while (i >= 0 && j < s.length() && s.charAt(i) == s.charAt(j)) {
            i--;
            j++;
        }
        if (maxLenInLongestPalindrome < j - i - 1) {
            startInLongestPalindrome = i + 1;
            maxLenInLongestPalindrome = j - i - 1;
        }
    }

    private int startInLongestPalindrome = 0, maxLenInLongestPalindrome = 0;

相關文章