使用C语言实现最长回文子串的查找

下面是一个使用C语言实现查找最长回文子串的例子:#include #include int expandAroundCenter(char *s, int left, int right) {int len = strlen(s);while (left >= 0 && right < len && s[left] == s[right]) {left–

下面是一个使用C语言实现查找最长回文子串的例子:

#include <stdio.h>
#include <string.h>

int expandAroundCenter(char *s, int left, int right) {
    int len = strlen(s);
    while (left >= 0 && right < len && s[left] == s[right]) {
        left--;
        right++;
    }
    return right - left - 1;
}

char *longestPalindrome(char *s) {
    if (s == NULL || 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 = len1 > len2 ? len1 : len2;
        
        if (len > end - start) {
            start = i - (len - 1) / 2;
            end = i + len / 2;
        }
    }
    
    char *result = (char *)malloc((end - start + 2) * sizeof(char));
    strncpy(result, s + start, end - start + 1);
    result[end - start + 1] = '
#include <stdio.h>
#include <string.h>
int expandAroundCenter(char *s, int left, int right) {
int len = strlen(s);
while (left >= 0 && right < len && s[left] == s[right]) {
left--;
right++;
}
return right - left - 1;
}
char *longestPalindrome(char *s) {
if (s == NULL || 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 = len1 > len2 ? len1 : len2;
if (len > end - start) {
start = i - (len - 1) / 2;
end = i + len / 2;
}
}
char *result = (char *)malloc((end - start + 2) * sizeof(char));
strncpy(result, s + start, end - start + 1);
result[end - start + 1] = '\0';
return result;
}
int main() {
char *s = "babad";
char *result = longestPalindrome(s);
printf("Longest Palindromic Substring: %s\n", result);
free(result);
return 0;
}
'
; return result; } int main() { char *s = "babad"; char *result = longestPalindrome(s); printf("Longest Palindromic Substring: %s\n", result); free(result); return 0; }

在上面的代码中,我们定义了一个expandAroundCenter函数来查找以某个中心展开的回文子串的长度。然后我们遍历字符串s,以每个字符为中心向两边扩展,分别计算出奇数长度和偶数长度的回文子串的长度,找出最长的回文子串并返回。最后在main函数中调用longestPalindrome函数来查找最长的回文子串并输出结果。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请发送邮件至 55@qq.com 举报,一经查实,本站将立刻删除。转转请注明出处:https://www.szhjjp.com/n/1007716.html

(0)
派派
上一篇 2024-04-26
下一篇 2024-04-26

相关推荐

  • 如何在Linux中进行硬件设备的识别和驱动管理

    在Linux中进行硬件设备的识别和驱动管理通常是通过以下几种方式来实现:使用命令行工具:lspci:用于显示系统的PCI设备信息,可以查看系统中安装的PCI设备的相关信息。lsusb:用于显示系统的USB设备信息,可以查看系统中连接的USB设备的相关信息。lsblk:用于显示系统的块设备信息,包括硬盘、光驱等设备的信息。lshw:用于显示系统的硬件配置信息,可以查看系统中各种硬件设备的详细信

    2024-03-28
    0
  • 「什么是域名实名认证吗」现在注册域名要实名认证吗

    什么是域名实名认证吗,域名要实名认证吗 内容导航: 域名实名认证和备案的区别是什么 现在注册域名要实名认证吗 万网域名买过后可以先不实名认证吗 域名个人实名认证和企业实名认证的区别…

    2022-05-18
    0
  • 公户对公户刷流水然后贷款(公户流水可以作为房贷依据吗)

    公户对公户刷流水然后贷款,公户流水可以作为房贷依据吗内容导航:在银行开的对工帐户里的流水对贷款有用处吗我在企业微信里平安银行贷款审核通过了说流水低到不了帐又让刷流建行周末可以公户对公户转账吗2017开增值税专用发票必须公户对公户吗一、在银行开的对工帐户里的流水对贷款有用处吗没有用,个人贷款需要的流水主要个人账户

    2022-04-19
    0
  • sqlserver如何保存数据库

    在SQL Server中保存数据库,可以通过以下步骤操作:打开SQL Server Management Studio(SSMS)。连接到SQL Server数据库引擎。在对象资源管理器中,选择要保存的数据库。右键单击该数据库,选择“任务” > “生成脚本”。在“生成脚本向导”中,选择生成数据库对象的方式(全部对象、选定的对象、仅表和视图等)。设置生成脚本的选项,如输出文件的位置、是否生成DROP

    2024-04-22
    0
  • 「企业网站建设备案都需要什么」网站备案需要开公司吗

    企业网站建设备案都需要什么,网站备案需要开公司吗内容导航:建设网站备案需要哪些资料三级建筑装饰企业办理安全生产许可证需要ABC三证齐全请问这三企业建设网站为什么要备案企业网站怎么备案一、建设网站备案需要哪些

    2022-05-03
    0
  • 公司网站建设需要些什么要求(专业的网站建设公司具备哪些条件)

    公司网站建设需要些什么要求,专业的网站建设公司具备哪些条件内容导航:网站建设要求你认为公司在管理过程中还有哪些需要改进的地方你有什么建设建设网站需要什么建设网站需要准备什么建设网站需要准备些什企业网站

    2022-05-11
    0

发表回复

登录后才能评论