一个规则回文是一个由数字或字母组成的字符串,将它从左读到右和从右读到左都是
一样的。例如,字符串“ABCDEDCBA”就是一个回文,因为从左读到右和从右读到左都
是一样的。
现在给你一个字符串 S,你要计算出它有多少个回文子串。
2.输入描述
输入数据中有多个测试案例。每个案例是一个非空且长度不超过 5000 的字符串。
处理到文件结尾。
3.输出描述
在每行上打印出该字符串中回文子串的个数。
4.输入样例
aba
aa
5.输出样例
4
3
#include "stdafx.h"
#include<string>
#include<iostream>
#include<fstream>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
ifstream fin("D:\\visual studio 2013 code\\test.txt");
char pa[1000];
int pa_count;
int left, right, mid, i,palen;
while (fin >> pa)
{
pa_count = 0;
palen = strlen(pa);
//cout << palen << endl;
for (i = 0; i < palen - 1; i++)
{
mid = ((palen - 1) - i) / 2;
if (((palen - 1) - i) % 2 == 0)
{
left = i + mid - 1;
right = i + mid + 1;
}
else
{
left = mid;
right = mid + 1;
}
while (left >= i)
{
if (pa[left] == pa[right])
{
pa_count++;
left--;
right++;
}
else
break;
}
}
for (i = palen - 2; i >= 1; i--)
{
mid = i / 2;
if (i % 2 == 0)
{
left = mid - 1;
right = mid + 1;
}
else
{
left = mid;
right = mid + 1;
}
while (left >= 0)
{
if (pa[left] == pa[right])
{
pa_count++;
left--;
right++;
}
else
break;
}
}
cout << pa_count+palen << endl;
}
return 0;
}