题目描述:
有一个字符串只有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; }