C语言编程练习12:回文串
题目描述
现在给你一个字符串S,请你计算S中有多少连续子串是回文串。
输入
输入包含多组测试数据。每组输入是一个非空字符串,长度不超过5000。
输出
对于每组输入,输出回文子串的个数。
样例输入 Copy
aba
aa
样例输出 Copy
4
3
#include <bits/stdc++.h>
using namespace std;
int main()
{
char s[5020];
int i,j,l;
while(cin>>s)
{
l=strlen(s);
int k=0;//回文串的个数
for(i=0;i<l;i++)//遍历字符串
{
for(j=0;i-j>=0&&i+j<l;j++)//每个字符都是一个回文串,然后判断当前字符的前一个和后一个字符是否相等,若相等个数k++
{
if(s[i-j]==s[i+j])
{
k++;
}
else
break;
}
if(s[i]!=s[i+1])continue;//判断当前字符是否与下一个字符相等,不等则跳转下一个循环
for(j=0;i-j>=0&&i+1+j<l;j++) //相等则判断下一个的字符的前一个字符与后一个字符是否相等,若相等个数k++
{
if(s[i-j]==s[i+1+j])
k++;
else
break;
}
}
cout<<k<<endl;//输出个数k;
}
return 0;
}

浙公网安备 33010602011771号