leetcode hot 100 划分字母区间

763. 划分字母区间

已解答

中等

相关标签

相关企业

提示

给你一个字符串 s 。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。

注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s

返回一个表示每个字符串片段的长度的列表。

复制代码
class Solution(object):
    def partitionLabels(self, s):
        """
        :type s: str
        :rtype: List[int]
        """
        hashmap = {}
        for index , i in enumerate(s):
            if hashmap.get(i)==None:
                hashmap[i]=[index,index]
            else:
                hashmap[i][1] = index

        # 左臂右弼的()
        start = hashmap[s[0]][0]
        end =  hashmap[s[0]][1]
        ans = []
        for i in range(len(s)):
            if i>end:
                ans.append(end - start+1)
                start = i
                end =  hashmap[s[i]][1]

            if hashmap[s[i]][1] > end:
                end = hashmap[s[i]][1]
        ans.append(end-start+1)
        return ans

这个很简单的贪心算法,也就是遍历一遍,然后看看遍历内的东西最远额能到哪里,如果遍历到达了之前的元素到达的最远,那就是一个划分

相关推荐
123_不打狼几秒前
词嵌入模型
人工智能·算法
拼好饭和她皆失7 分钟前
图论:拓扑排序讲解,以及 Dijkstra算法,Bellman-Ford算法,spfa算法,Floyd算法模板大全
算法·图论·最短路
爱学习的阿磊12 分钟前
模板编译期排序算法
开发语言·c++·算法
皮卡蛋炒饭.14 分钟前
动态规划-多重背包
数据结构·算法·动态规划
ZPC821019 分钟前
opencv 实现图像拼接
人工智能·python·算法·机器人
爱学习的阿磊27 分钟前
C++代码动态分析
开发语言·c++·算法
WWZZ202529 分钟前
C++:STL(容器deque)
开发语言·c++·算法·大模型·具身智能
AI科技星29 分钟前
加速运动正电荷产生加速度反向引力场的详细求导过程
人工智能·线性代数·算法·机器学习·矩阵·概率论
近津薪荼29 分钟前
优选算法——双指针专题3(快慢双指针)
c++·学习·算法
shengli72234 分钟前
C++与硬件交互编程
开发语言·c++·算法