LeetCode刷题之旅(5)

题目描述

一直都没弄明白O(n)解法的意思,我的解法是以i为中间值,向两边扩张,判断是否相等,需要注意的是奇数和偶数的问题,所以内部为2次for循环,分别对应奇数,偶数。解决代码如下:

public class Solution {
    public String longestPalindrome(String s) {
        int i, j, max = 0, c = 0, n = s.length();
        String result = "";
        if (s.length() == 0 || n < 1)
            return result;
        for (i = 0; i < n; ++i) {
            // 奇数
            for (j = 0; (i - j >= 0) && (i + j < n); ++j) {
                if (s.charAt(i - j) != s.charAt(i + j))
                    break;
                c = j * 2 + 1;
            }
            if (c > max) {
                max = c;
                result = s.substring(i - j + 1, i + j);
            }
            // 偶数
            for (j = 0; (i - j >= 0) && (i + j + 1 < n); ++j) {
                if (s.charAt(i - j) != s.charAt(i + j + 1))
                    break;
                c = j * 2 + 2;
            }
            if (c > max) {
                max = c;
                result = s.substring(i - j + 1, i + j + 1);
            }
        }
        return result;
    }
}

你可能感兴趣的:(LeetCode)