题目描述
大意
0和1交替出现的字符串为漂亮字串,?可以为1也可以为1,问所给字符串有多少个漂亮子串。
分析
采用的是动态规划的方法解题,按照不同位的值划分集合
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 2e5 + 10;
typedef long long ll;
int n, m, k, t;
ll f[N][2];
void solve()
{
memset(f, 0, sizeof f);
string s;
ll ans = 0;
cin >> s;
s = " " + s;
int len = s.size();
for(int i = 1; i < len; i ++)
{
if(s[i] == '0') f[i][0] = f[i - 1][1] + 1;
else if(s[i] == '1') f[i][1] = f[i - 1][0] + 1;
else
{
f[i][0] = f[i - 1][1] + 1;
f[i][1] = f[i - 1][0] + 1;
}
ans += max(f[i][0], f[i][1]);
}
cout << ans << "\n";
}
int main()
{
cin >> t;
while(t --)
{
solve();
}
return 0;
}