C语言基础

题目描述
给定一个字符串 S,请你求出 S 的最长回文子串

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

//中心扩展法查找最长回文子串

int longestPalindrome(char* s){

 // start和maxlength用于记录最长回文子串的起始位置和长度

int start = 0,maxLength = 1; 

 //len是字符串的长度

 int len = strlen(s);

// 外层循环遍历字符串的每个字符,作为回文中心

for(int i = 0;i<len ; i++){

 //第一层内循环处理以单个字符为中心的回文子串

int left = i ,right = i; // 偶数

while(left >= 0 && right <len && s[left] == s[right]){

int currLength = right - left +1;

 //在每次扩展中,如果找到更长的回文子串,则更新start和maxlength

if(currLength > maxLength){

  start = left ;

  maxLength = currLength;

}

left--;

right++;

}

//扩展中心为两个字符的情况

 //第二层内循环处理以两个字符为中心的回文子串 (用于偶数长度的回文)

left = i, right = i +1;

while(left >= 0 && right <len && s[left] == s[right]){

  int currLength = right -left +1;

  if(currLength > maxLength){

    start = left ; 

    maxLength = currLength;

  }

  left--;

  right++;

}

}

return maxLength;

}

int main(int argc, char *argv[])

{

  char s[500000];

  //读取一个字符串

scanf("%s",s);

  //调用函数计算最长回文子串的长度

printf("%d\n",longestPalindrome(s));

  //输出最长回文子串的长度

  

  return 0;

}











 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值