题目就是给定一个字符串,求不同时包含‘1’和‘4’的连续子串数量。
#include<iostream>
using namespace std;
typedef long long LL;
int main()
{
int n;
cin >> n;
string s;
cin >> s;
s = ' ' + s;
int a = 0, b = 0;
//a 代表最后出现 1 的位置
//b 代表最后出现 4 的位置
LL ans = 0;
//不同时包含1 4 的子串数量
for (int i = 1; i <= n; ++i)
{
if (s[i] == '1') a = i, ans += i - b;
// [b + 1 , i]以 i 为结尾的字符串数量
else if (s[i] == '4') b = i, ans += i - a;
// [a + 1 , i]以 i 为结尾的字符串数量
else ans += i - min(a, b);
}
cout << ans;
return 0;
}