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

相关推荐
xlq2232220 小时前
22.多态(上)
开发语言·c++·算法
666HZ66620 小时前
C语言——高精度加法
c语言·开发语言·算法
星释20 小时前
Rust 练习册 100:音乐音阶生成器
开发语言·后端·rust
D_evil__21 小时前
[C++高频精进] 并发编程:线程基础
c++
风生u21 小时前
go进阶语法
开发语言·后端·golang
666HZ66621 小时前
C语言——黑店
c语言·开发语言
Gomiko21 小时前
JavaScript基础(八):函数
开发语言·javascript·ecmascript
〝七夜56921 小时前
JVM内存结构
java·开发语言·jvm
初级炼丹师(爱说实话版)21 小时前
JAVA泛型作用域与静态方法泛型使用笔记
java·开发语言·笔记
Mr_WangAndy21 小时前
C++17 新特性_第二章 C++17 语言特性_std::any和string_view
c++·string_view·c++40周年·c++17新特性·c++新特性any