leetcode-master/problems/kamacoder/0150.极长连续段的权值.md

794 B
Raw Blame History

按照动态规划的思路,每增加一位,对已有结果会有什么变化呢?

输入 字符串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;
}