【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。

相关推荐
封奚泽优17 分钟前
使用Python制造扫雷游戏
开发语言·python·游戏·pygame·扫雷·random
超浪的晨24 分钟前
Maven 与单元测试:JavaWeb 项目质量保障的基石
java·开发语言·学习·单元测试·maven·个人开发
魂尾ac26 分钟前
因为想开发新项目了~~要给老Python项目整个虚拟环境
开发语言·python
不会理财的程序员不是好老板28 分钟前
Java Spring Boot项目中集成Swagger完整步骤
java·开发语言·spring boot
Murphy_lx39 分钟前
C++多态的原理
java·开发语言·c++
Tjyuking2 小时前
OS架构整理
运维·c++·缓存·架构·操作系统
程序员编程指南2 小时前
Qt 移动应用发布与分发指南
c语言·开发语言·c++·qt
x晕x2 小时前
Qt 消息弹窗 Toast
linux·c++·windows·qt·mac
工程师0072 小时前
C#反射的概念与实战
开发语言·c#·反射
刚入坑的新人编程2 小时前
暑期算法训练.11
数据结构·c++·算法·leetcode·链表