794 B
794 B
按照动态规划的思路,每增加一位,对已有结果会有什么变化呢?
输入 字符串s 里面有 0 和 1
我们先计算出 s[i-1] 的 子串权值和 a
如果 s[i] 和 s[i - 1] 相同
下标0 到 i 这段字符串 的子串权值和就是 a + 1,即算上s[i]本身的连续串数量加上
如果 s[i] 和 s[i - 1] 不相同
#include <iostream>
#include <string>
using namespace std;
int main() {
int n;
cin >> n;
string s;
cin >> s;
long long result = 1;
long long a = 1;
for (int i = 1; i < n; ++i) {
if (s[i] == s[i - 1]) {
a += 1;
result += a;
} else {
a = a + i + 1;
result += a;
}
}
cout << result << endl;
return 0;
}