LeetCode-1759-统计同构子字符串的数目

LeetCode-1759-统计同构子字符串的数目_第1张图片

1、数学

我们可以使用数学进行分析:每当出现连续的 n n n个字符时,我们最终将其合在一起进行计算个数。显然我们可以获得的同构子字符串的个数应为 n × ( n + 1 ) 2 \frac{n \times (n+1)}{2} 2n×(n+1)。因此我们只需要遍历整个字符串,分别统计连续出现的字符串的长度即可计算,最终的时间复杂度为 O ( n ) O(n) O(n)

class Solution {
public:
    int countHomogenous(string s) {
        int length = s.size(), low = 0, high = 0;
        long long res = 0, mod = 1e9 + 7;
        while (high != length) {
            high = low;
            while (s[low] == s[high]) {
                ++high;
            }
            res += (long long) (high - low) * (high - low + 1) / 2;
            low = high;
        }
        return res % mod;
    }
};

你可能感兴趣的:(LeetCode刷题记录,leetcode,算法,职场和发展)