diff --git a/LeetCode-CN/828.cpp b/LeetCode-CN/828.cpp new file mode 100644 index 0000000..fb6f010 --- /dev/null +++ b/LeetCode-CN/828.cpp @@ -0,0 +1,35 @@ +class Solution { +public: + const static long long MOD = 1000000007; + int uniqueLetterString(string S) { + map> mp; + long long cnt = 0; + int slen = S.size(); + for (int i = 0; i < slen; i++) + { + auto iter = mp.find(S[i]); + if (iter == mp.end()) + { + tie(iter, ignore) = mp.insert(make_pair(S[i], vector{-1})); + + } + else + { + int sz = iter->second.size(); + int k = iter->second[sz - 2]; + int j = iter->second[sz - 1]; + cnt = (cnt + (j - k)*(i - j)) % MOD; + } + iter->second.push_back(i); + } + for (const auto& pr : mp) + { + int sz = pr.second.size(); + int k = pr.second[sz - 2]; + int j = pr.second[sz - 1]; + cnt = (cnt + (j - k)*(slen - j)) % MOD; + } + + return cnt; + } +};