【c++】leetcode763 划分字母区间

1.题目

题目分析:

①同一个字符只能出现在一个片段中

②划分成尽可能多的片段

2.code

思路:

①先把所有出现过的字符个数进行统计

②通过滑窗与快慢指针以及一个valid==windows.size()说明目前为止(fast)出现过的字符都已经全部出现过了,即不在其他的片段中

cpp 复制代码
class Solution {
public:
    vector<int> partitionLabels(string s) {
        unordered_map<char, int> t, window;
        std::vector<int> res{};
        int slow = 0, fast = 0, valid = 0;
        for (auto i = 0; i < s.length(); i++)
        {
            if (t.count(s[i]) == 0) t[s[i]] = 0;
            t[s[i]]++;
        }
        
        while (fast < s.length())
        {
            if (t.count(s[fast]))
            {
                window[s[fast]]++;
                if (window[s[fast]] == t[s[fast]]) valid++;
            }
            if (valid == window.size())
            {
                if (fast - slow < s.length())
                {
                    res.push_back(fast - slow + 1);
                    slow = fast + 1;
                }
            }
            fast++;
        }
        return res;
    }
};

截止到2025.7.30日,所有的case可以AC。

相关推荐
盐真卿15 分钟前
python第八部分:高级特性(二)
java·开发语言
茉莉玫瑰花茶18 分钟前
C++ 17 详细特性解析(5)
开发语言·c++·算法
lly20240625 分钟前
《堆的 shift down》
开发语言
cpp_250130 分钟前
P10570 [JRKSJ R8] 网球
数据结构·c++·算法·题解
cpp_250137 分钟前
P8377 [PFOI Round1] 暴龙的火锅
数据结构·c++·算法·题解·洛谷
黎雁·泠崖44 分钟前
【魔法森林冒险】2/14 抽象层设计:Figure/Person类(所有角色的基石)
java·开发语言
程序员老舅1 小时前
C++高并发精髓:无锁队列深度解析
linux·c++·内存管理·c/c++·原子操作·无锁队列
划破黑暗的第一缕曙光1 小时前
[C++]:2.类和对象(上)
c++·类和对象
季明洵1 小时前
C语言实现单链表
c语言·开发语言·数据结构·算法·链表
墨雪不会编程1 小时前
C++之【深入理解Vector】三部曲最终章
开发语言·c++