• leetcode-5


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

    示例 1:

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

    输入: "cbbd"
    输出: "bb"

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-palindromic-substring
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    此题简单的一个算法就是中心扩展,需要考虑的是奇数和偶数。

    事实上,只需使用恒定的空间,我们就可以在 O(n^2)

    我们观察到回文中心的两侧互为镜像。因此,回文可以从它的中心展开,并且只有 2n−1 个这样的中心。

    为什么会是2n−1 个,而不是 n 个中心?原因在于所含字母数为偶数的回文的中心可以处于两字母之间。例如abba的中心在bb中间。

    class Solution {
       public static String longestPalindrome(String s) {
            if (s == null || s.length() < 1) return "";
            int start = 0, end = 0;
            for (int i = 0; i < s.length(); i++) {
                int len1 = expandAroundCenter(s, i, i);
                int len2 = expandAroundCenter(s, i, i + 1);
                int len = Math.max(len1, len2);
                if (len > end - start) {
                    start = i - (len - 1) / 2;
                    end = i + len / 2;
                }
            }
            return s.substring(start, end + 1);
        }
    
        private static int expandAroundCenter(String s, int left, int right) {
            int L = left, R = right;
            while (L >= 0 && R < s.length() && s.charAt(L) == s.charAt(R)) {
                L--;
                R++;
            }
            return R - L - 1;
        }
    }

    至于动态规划,以后看到再补充,目前不太会动态规划。

     
    一个没有高级趣味的人。 email:hushui502@gmail.com
  • 相关阅读:
    Jenkins的安装及使用[转]
    JAVA服务巡检项
    Kafka小结
    网络是怎样连接的
    redis扩容手册
    [WinUI3] 如何自定义桌面应用标题栏
    winform代码生成器分享
    微信支付微信回调通知验签
    Sql创建数据和表
    使用 链接服务器执行SELECT、UPDATE、INSERT 或 DELETE 及其它命令
  • 原文地址:https://www.cnblogs.com/CherryTab/p/12028786.html
Copyright © 2020-2023  润新知