题目描述:

  有一个字符串只有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;
}

 

posted on 2017-10-21 10:29  曹婷婷  阅读(475)  评论(0编辑  收藏  举报