题目描述:
有一个字符串只有0和1组成,对于某个子串,如果将0和1互换并且倒过来与原子串相同,则认为该子串是"反对称"的.给出一个长度为N的字符串,那么有多少个子串是"反对称"的?
输入:
第一行一个正整数N(0<=N<=10000).
第二行包括一个长度为N的01串.
输出:
输出"反对称"子串的个数.
代码描述:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int a[11000];
int main()
{
char c;
int n;//字符串个数
while (cin>>n)
{
getchar();
for (int i = 1; i <= n; i++)
{
cin >> c;
a[i] = c - '0';//转化为整型数组
}
int sum = 0;//记录反对称串个数
for (int i = 1; i<n; i++)
{
if (a[i] == ((a[i + 1] + 1) % 2))//若相等说明为01或10
{
sum++;
int j, k;
for (j = i - 1, k = i + 2; j >= 1 && k <= n; j--, k++)
{
if (a[j] == (a[k] + 1) % 2)
sum++;
else
break;
}
}
}
cout << sum << endl;
}
return 0;
}