算法真是太美妙了

领扣笔记

题目:最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:

输入: “cbbd”
输出: “bb”

我自己想到的只有暴力解法,很容易就写出来,果然超时了,我自己拿到IDE中调试了下,不考虑时间的话还是能跑通的哈哈哈。代码如下:

class Solution {
    public String longestPalindrome(String s) {
        /*************暴力弟弟算法*************/
        if (s == null || s == "") return s;
        String res = new String();
        for (int i = 0; i < s.length(); i++) {
            for (int j = i + 1; j <= s.length(); j++) {
                if (isPalindrome(s.substring(i, j))) {
                    res = s.substring(i, j).length() > res.length()? s.substring(i, j):res;
                }
            }
        }
        return res;
    }
    private boolean isPalindrome(String s) {
        int i = 0, j = s.length() - 1;
        while (i < j) {
            if (s.charAt(i) == s.charAt(j)) {
                i++;
                j--;
            }
            else return false;
        }
        return true}
}

然后去搜了别人家的算法,真的是赏心悦目啊,在这里做个笔记,原作者我不知道了,抱歉抱歉。

class Solution {
    public String longestPalindrome(String s) {
		if (s.isEmpty() || s.length() == 1) return s;
        String longest = s.substring(0, 1);
        for (int i = 0; i < s.length(); i++) {
            //以当前i为中心的奇数长度最长回文子串
            String tmp = findLongest(s, i, i);
            //是否需要更新最长
            if (tmp.length() > longest.length()) {
                longest = tmp;
            }
            //以当前i为中心的偶数长度最长回文子串
            tmp = findLongest(s, i, i+1);
            //是否需要更新最长
            if (tmp.length() > longest.length()) {
                longest = tmp;
            }
        }
        return longest;
    }
    private String findLongest(String s, int begin, int end) {
        //以begin为中心的最长子串,一趟扫描就可以判断出来
        while (begin >= 0 && end <= s.length( ) - 1 && s.charAt(begin) == s.charAt(end)) {
            begin--;
            end++;
        }
        String tmp = s.substring(begin + 1, end);
        return tmp;
    }
}

路漫漫其修远兮,共勉。

猜你喜欢

转载自blog.csdn.net/weixin_42750480/article/details/84848013