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

 

posted @ 2021-01-22 19:21  FantasticDoulbeFish  阅读(680)  评论(0编辑  收藏  举报