leetcode 763划分字母区间

简介: leetcode 763划分字母区间

划分字母区间

bf8dc6f7edca40f89e00c3d758f238b9.png题意简述为

即最多能切多少段?使得同一字母都出现在一个片段,且片段最多。

思路

先统计整个字符串的map字典。

然后再次遍历字符串,当遍历字符串某一点时,当前字符串区间出现的字母个数就是整个字符串的字母个数(即当前字符串区间出现的字母,全部都出现在这里,区间外没有这个字母再次出现了),纪录当前区间是一段。

class Solution {
public:
    vector<int> partitionLabels(string s) {
        map<char,int> my_map; //整个字符串字典
        map<char,int> my_map_tmp;// 一段的字典
        vector<int> result;
        int start = 0; //段开始标志
        for(int i=0 ; i< s.size() ; i++) my_map[s[i]]++;
        // for(auto it:my_map) cout<<it.first<<' '<<it.second<<endl;
        for(int i=0 ; i<s.size() ;i++)
        {
            my_map_tmp[s[i]]++; //更新一段的字典
            //检查当前的字典和全局字典,字母出现的次数
            for(auto it = my_map_tmp.begin() ; it != my_map_tmp.end() ;it++)
            {
              //当前段中字母出现个数和全局不同(即还有字母没发现),跳出
                if( it->second != my_map[it->first]) break;
                //当前段出现的字母,字母数量和全局数量都相同(即全发现)
                if(it == -- my_map_tmp.end() ) //遍历到最后一个字母都没跳出
                {
                    result.push_back(i-start+1); //记录段长度
                    start = i+1; //下一段开始点
                    my_map_tmp.clear();//清空段字典
                }
            }
        }
        return result;
    }
};

二刷

class Solution {
public:
    vector<int> partitionLabels(string s) {
        map<char,int> my_map;
        vector<int> result;
        int left=0,right =0;
        for(int i=0 ; i<s.size() ;i++)
        {
            my_map[s[i]] = i; 
        }
        // for(auto it:my_map)
        // {
        //     cout<<it.first<<' '<<it.second<<endl;
        // }
        for(int i=0 ; i<s.size() ;i++)
        {
            right = max(right,my_map[s[i]]);
            if(right==i)
            {
                result.push_back(right-left+1);
                left = i+1;
            }
        }
        return result;
    }
};


相关文章
|
3月前
|
存储 算法
LeetCode第49题字母异位词分组
LeetCode第49题"字母异位词分组"的解题方法,通过将每个字符串的字符排序后作为键存储在HashMap中,有效地将所有字母异位词分组。
LeetCode第49题字母异位词分组
|
30天前
|
存储
Leetcode第49题(字母异位词分组)
LeetCode第49题要求将字符串数组中的字母异位词分组,可以通过将每个字符串排序后作为键存入哈希表,最后将哈希表中的值添加到结果列表中来实现。
14 1
|
30天前
|
算法
Leetcode第57题(插入区间)
LeetCode第57题“插入区间”的解题方法,包括题目描述、示例、算法思路和代码实现,旨在解决将新区间插入有序且不重叠的区间列表中,并合并重叠区间的问题。
14 0
Leetcode第57题(插入区间)
|
30天前
|
算法
Leetcode第十七题(电话号码的字母组合)
这篇文章介绍了如何使用深度优先搜索(DFS)算法来解决LeetCode第17题——电话号码的字母组合问题,通过递归方法生成所有可能的字母组合。
15 0
Leetcode第十七题(电话号码的字母组合)
|
1月前
|
索引
【LeetCode 11】242.有效的字母异位词
【LeetCode 11】242.有效的字母异位词
13 0
【LeetCode 11】242.有效的字母异位词
|
30天前
|
算法
【LeetCode 52】17.电话号码的字母组合
【LeetCode 52】17.电话号码的字母组合
30 0
|
3月前
|
算法
LeetCode第57题插入区间
LeetCode第57题"插入区间"的解题方法,利用原区间集有序的特性,通过三步插入操作,有效实现了新区间的插入和重叠区间的合并。
LeetCode第57题插入区间
|
3月前
|
算法
LeetCode第17题电话号码的字母组合
该文章介绍了 LeetCode 第 17 题电话号码的字母组合的解法,通过分析得出可使用递归和回溯的思想解决,避免循环穷举的高循环次数,并给出了具体的编码实现,同时总结了该题较难理解,需要了解递归的本质,当嵌套循环层次多时可考虑递归。
LeetCode第17题电话号码的字母组合
|
5月前
|
存储 算法 测试技术
力扣经典150题第四十七题:汇总区间
力扣经典150题第四十七题:汇总区间
37 1
|
5月前
|
存储 算法 测试技术
力扣经典150题第四十九题:插入区间
力扣经典150题第四十九题:插入区间
23 0