[leetcode] 828. 统计子串中的唯一字符

简介: [leetcode] 828. 统计子串中的唯一字符

题目链接:传送门


很容易想到记录每个字幕出现的位置,按照每个字母出现的位置来计算对答案产生的贡献

如果说当前位置为posj,前一次出现了的位置为posi,下一次出现的位置为posk,那么当前位置posj对答案产生的贡献是:

(posj - posi) * (posk - posj)


code:

class Solution {
public:
    int uniqueLetterString(string s) {
        int ans = 0;
        unordered_map<int,vector<int> > mp;
        for(int i = 0;i < s.size(); i ++) {
            if(mp[s[i]].size() == 0) {
                mp[s[i]].push_back(-1);
            }
            mp[s[i]].push_back(i);
        }
        unordered_map<int, vector<int> >::iterator it;
        for(it = mp.begin(); it != mp.end(); it ++) {
            char c = it->first;
            vector<int> v = it->second;
            v.push_back(s.size());
            for(int i=1;i<v.size() - 1;i ++) {
                ans += (v[i] - v[i-1]) * (v[i+1] - v[i]);
            }
        }
        return ans;
    }
};
目录
相关文章
|
2月前
|
Unix Shell Linux
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
本文提供了几个Linux shell脚本编程问题的解决方案,包括转置文件内容、统计词频、验证有效电话号码和提取文件的第十行,每个问题都给出了至少一种实现方法。
LeetCode刷题 Shell编程四则 | 194. 转置文件 192. 统计词频 193. 有效电话号码 195. 第十行
|
1月前
|
存储 算法
Leetcode第三题(无重复字符的最长子串)
这篇文章介绍了解决LeetCode第三题“无重复字符的最长子串”的算法,使用滑动窗口技术来找出给定字符串中最长的不含重复字符的子串,并提供了详细的代码实现和解释。
69 0
Leetcode第三题(无重复字符的最长子串)
|
3月前
|
算法
LeetCode第3题无重复字符的最长子串
该文章介绍了 LeetCode 第 3 题无重复字符的最长子串的解法,通过使用 HashSet 记录不重复的子元素,以每个字符开头遍历字符串,遇到重复字符则重新计算,最终找到最长子串,同时提到可以考虑使用 HashMap 降低复杂度。
LeetCode第3题无重复字符的最长子串
|
3月前
|
存储 算法 Java
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
LeetCode初级算法题:反转链表+统计N以内的素数+删除排序数组中的重复项Java详解
45 0
|
5月前
|
存储 算法 测试技术
力扣经典150题第三十三题:最小覆盖子串
力扣经典150题第三十三题:最小覆盖子串
38 1
|
5月前
|
算法
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
【LeetCode刷题】滑动窗口解决问题:串联所有单词的子串(困难)、最小覆盖子串(困难)
|
4月前
|
存储 算法
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
经典的滑动窗口的题目 力扣 2799. 统计完全子数组的数目(面试题)
|
4月前
|
索引
821.字符的最短距离-力扣(LeetCode)
821.字符的最短距离-力扣(LeetCode)
35 0
|
5月前
|
算法 测试技术 索引
力扣经典150题第三十二题:串联所有单词的子串
力扣经典150题第三十二题:串联所有单词的子串
27 0
|
5月前
|
存储 算法 程序员
力扣经典150题第三十一题:无重复字符的最长子串
力扣经典150题第三十一题:无重复字符的最长子串
32 0