Longest Palindrome Substring

// Consider substring ends at index i,
// we only consider string with length of (maxLen + 2) and (maxLen + 1)
// No need to consider <= maxLen since we aim to get the longest
// No need to consider length >= (maxLen + 3) since if so, then the maxLen should
// already be (maxLen + 1) at index i - 1

public String longestPalindrome(String s) {
        if (s == null || s.length() == 0) return "";
        char[] array = s.toCharArray();

        int rStart = 0, rEnd = 0, maxLen = 0;
        for (int i = 0; i < array.length; i++) {
            if (isPalindrome(array, i - maxLen - 1, i)) {
                rStart = i - maxLen - 1;
                rEnd = i;
                maxLen += 2;

            } else if (isPalindrome(array, i - maxLen, i)) {
                rStart = i - maxLen;
                rEnd = i;
                maxLen += 1;
            }
        }

        return s.substring(rStart, rEnd + 1);
    }

    public boolean isPalindrome(char[] array, int start, int end) {
        if (start < 0 || end  >= array.length) return false;

        while (start < end) {
            if (array[start++] != array[end--]) {
                return false;
            }
        }
        return true;
    }

results matching ""

    No results matching ""