LeetCode-828-统计子串中的唯一字符

LeetCode-828-统计子串中的唯一字符_第1张图片

1、数学

我们可以使用哈希表来记录字符串中每个字符出现的位置。考虑到子字符串必须是连续的,对于字符 s [ j ] s[j] s[j]而言,假设其上一次出现的位置是 i i i,下一次出现的位置是 k k k,显然我们可获得的字符串个数为 ( k − j ) × ( j − i ) (k-j) \times (j-i) (kj)×(ji)。我们可以遍历哈希表中的每一个字符,获得仅包含当前一个字符的子字符串并累加即可获得最终结果。

class Solution {
public:
    int uniqueLetterString(string s) {
        int n = s.size(), res = 0;
        unordered_map<char, vector<int>> hs;
        for (int i = 0; i < n; ++i) {
            hs[s[i]].emplace_back(i);
        }
        for (auto &&item: hs) {
            item.second.insert(item.second.begin(), -1);
            item.second.emplace_back(n);
            for (int i = 1; i < item.second.size() - 1; ++i) {
                res += (item.second[i] - item.second[i - 1]) * (item.second[i + 1] - item.second[i]);
            }
        }
        return res;
    }
};

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