挑战刷leetcode第四天( 最长回文子串),你看我行吗?

61 阅读1分钟

java代码

 public String longestPalindrome(String s) {

        if (s == null || s.length() == 0) {
            return "";
        }

        int l = 0;
        int len = 1;
        int maxLen = 0;
        int r = 0;
        int maxl = 0;
        for (int i = 0; i < s.length(); i++) {
            l = i - 1;
            r = i + 1;
            while (l >= 0 && s.charAt(l) == s.charAt(i)) {
                l--;
                len++;
            }
            while (r < s.length() && s.charAt(r) == s.charAt(i)) {
                r++;
                len++;
            }
            while (l >= 0 && r < s.length() && s.charAt(l) == s.charAt(r)) {
                len += 2;
                r++;
                l--;
            }

            if (len > maxLen) {
                maxLen = len;
                maxl = l;
            }
            len = 1;
        }
        return s.substring(maxl + 1, maxl + 1 + maxLen);
    }

C++代码

 string longestPalindrome(string s) {
        if (s.size() == 0) {
            return "";
        }
        int l = 0;
        int len = 1;
        int maxLen = 0;
        int r = 0;
        int maxl = 0;
        for (int i = 0; i < s.size(); i++) {
            l = i - 1;
            r = i + 1;
            while (l >= 0 && s[l] == s[i]) {
                l--;
                len++;
            }
            while (r < s.size() && s[r] == s[i]) {
                r++;
                len++;
            }
            while (l >= 0 && r < s.size() && s[l] == s[r]) {
                len += 2;
                r++;
                l--;
            }

            if (len > maxLen) {
                maxLen = len;
                maxl = l;
            }
            len = 1;
        }
        return s.substr(maxl+1, maxLen);
    }

总结

核心就是使用中心扩散法,两边去判断是否回文,回文的条件元素相等+元素对称 java的substring(n,m) 是从n下标截取到m前一位 ,左闭右开; C++的substr(n,m) 是从n位置开始,截取m位,包含n位;

打卡完成,继续坚持!!!希望友友们监督哈