5. 最长回文子串 难度:中等

题目描述:

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

示例1:

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

示例2:

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

示例3:

输入:s = "a"
输出:"a"

示例4:

输入:s = "ac"
输出:"a"

提示

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母(大写和/或小写)组成

思路

动态规划

代码示例:

char * longestPalindrome(char * s){
    int dp[1001][1001] = {0};
    int n = strlen(s);
    int len = 0, i = 0;
    int start = 0, end = 0;
    for(len = 0; len < n; ++len) {
        for(i = 0; i + len < n; ++i) {
            int j = i + len;
            if(len == 0) {
                dp[i][j] = 1;
            } else if(len == 1) {
                dp[i][j] = s[i] == s[j];
            } else {
                dp[i][j] = (s[i] == s[j]) && dp[i + 1][j - 1];
            }
            if(dp[i][j] && (len > end - start)) {
                start = i;
                end = j;
            }
        }
    }
    s[end + 1] = '\0';
    return s + start;
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容