LeetCode算法:最长回文子串(中等)

玄德 2022-03-30 11:36:02

给你一个字符串 s,找到 s 中最长的回文子串。

示例 1:

输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。

示例 2:

输入:s = "cbbd"
输出:"bb"

提示:

    1 <= s.length <= 1000
    s 仅由数字和英文字母组成


C:

方法一:中心扩展

//计算回文串长度
int expandAroundCenter(char *s, int left, int right) {
    int L = left, R = right;
    while (L >= 0 && R < strlen(s) && s[L] == s[R]) {
        L--;
        R++;
    }
    return R - L - 1;
}
//字符串截取
char *cutwords(char *page,int start,int end){
    char *word = malloc(sizeof(char)*2001);
    int pos = 0;
    for(int i = start; i < end; i++){
        word[pos++]=page[i];
    }
    word[pos] = '\0';
    return word;
}

char * longestPalindrome(char * s){
    //判断是否提前结束
    if (strlen(s) < 1) {
        return "";
    }
    //
    int start = 0, end = 0;
    for (int i = 0; i < strlen(s); i++) {
        int len1 = expandAroundCenter(s, i, i);     //一个元素为中心
        int len2 = expandAroundCenter(s, i, i + 1); //两个元素为中心
        int len = fmax(len1, len2);
        if (len > end - start) {
            start = i - (len - 1) / 2;
            end = i + len / 2;
        }
    }
    return cutwords(s, start, end + 1);
}

题目来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/longest-palindromic-substring

...全文
123 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
内容概要:本文精选了10道经典的LeetCode题目,涵盖常见的算法和数据结构,难度从易到中等。每道题都提供了详细的分析过程、可直接运行的Python代码以及复杂度分析。具体包括:两数之和(使用哈希表优化查找)、反转链表(迭代法)、最长回文子串(中心扩展法)、合并两个有序链表(递归法)、最大子数组和(动态规划)、二叉树的层序遍历(广度优先搜索)、合并区间(排序后遍历)、有效的括号(栈匹配)、存在重复元素(哈希集合)、二叉搜索树的最近公共祖先(利用BST性质)。每道题的分析不仅讲解了思路,还附带了完整的代码实现,并对时间和空间复杂度进行了总结。 适合人群:具备一定编程基础,尤其是对Python语言有一定了解,希望提高算法和数据结构能力的学习者。 使用场景及目标:①帮助读者掌握常见算法和数据结构的核心思想;②提供实际可运行的代码示例,便于理解和实践;③通过复杂度分析,培养读者对算法效率的敏感度;④适用于准备技术面试或自我提升的程序员。 阅读建议:建议读者先尝试独立思考每道题的解法,再参考提供的分析和代码,最后通过LeetCode平台提交测试用例验证自己的理解和代码实现。此外,读者应重点关注算法的设计思路和复杂度分析,以提升解决问题的能力。

30,419

社区成员

发帖
与我相关
我的任务
社区描述
打造最热爱学习的高校社区,帮助大家提升计算机领域知识,带大家打比赛拿奖,提高自我,希望大家共同创造良好的社区氛围。
社区管理员
  • 川川菜鸟
  • 亡心灵
  • 星辰菜鸟
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

监督大家学习,每日学习打卡,以投稿形式打卡。扫码关注公众号,可加入粉丝群和领取大量资源。

试试用AI创作助手写篇文章吧