Special String Again

  • + 0 comments

    prefix sum algorithm

    `long substrCount(int n, string s) { vector left(n, 0), right(n, 0); left[0] = 1; right[n - 1] = 1; for(int i = 1; i < s.size(); i++) { if(s[i] == s[i - 1]){ left[i] = left[i - 1] + 1; } else { left[i] = 1; } } for(int i = n - 1; i >= 0; i--) { if(s[i] == s[i + 1]){ right[i] = right[i + 1] + 1; } else { right[i] = 1; } }

    long ans = 0;
    for(int i = 0; i < n; i++) {
        // cout << left[i] << " " << right[i] << endl;
        ans++;
        // odd
        if((i > 0 && i < n - 1) && s[i - 1] == s[i + 1] && s[i - 1] != s[i]) {
            ans += min(left[i - 1], right[i + 1]);
        }
    
        // even
        if(i > 0 && s[i - 1] == s[i]) {
            ans += left[i - 1];
        }
    }
    return ans;
    

    }