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

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

相关推荐
点云侠19 小时前
隧道中线提取的优化方法
c++·算法·最小二乘法
圣保罗的大教堂19 小时前
leetcode 3761. 镜像对之间最小绝对距离 中等
leetcode
minji...19 小时前
Linux 线程同步与互斥(五) 日志,线程池
linux·运维·服务器·开发语言·c++·算法
python_DONG19 小时前
响应面法(Response Surface Methodology, RSM)单目标优化算法
算法·数学建模
6Hzlia19 小时前
【Hot 100 刷题计划】 LeetCode 108. 将有序数组转换为二叉搜索树 | C++ 分治法详解
c++·算法·leetcode
itzixiao20 小时前
L1-051 打折(5分)[java][python]
java·python·算法
贾斯汀玛尔斯20 小时前
每天学一个算法--Aho–Corasick 自动机
java·linux·算法
re林檎21 小时前
八大排序算法(C++实现)
c++·算法·排序算法
淘气包海鸟21 小时前
雷达度量衡量
人工智能·算法·机器学习·信息与通信
睡觉就不困鸭21 小时前
第12天 多数元素
算法·哈希算法·散列表