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; }