from re import I
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
# 
# @param s string字符串 
# @return int整型一维数组
#
class Solution:
    def splitString(self , s: str) -> List[int]:
        # write code here
        di = {}
		# 存储每种字符的起始节点和结束节点,由于i从0开始,得到的结果di['x'][0]一定是有序的
        for i in range(len(s)):
            if s[i] not in di:
                di[s[i]] = [i,i]
            else:
                di[s[i]][-1] = i
        start,end = 0,0
        ret = []
		# 初始化[start,end]后遍历列表,共三种可能,
		# 1.下一个区间和旧区间有重合部分,即l<end ,且r > end则更新end=r
		# 2.下一个区间被旧区间完全包含,即l<end r<end,[start,end]不更新进入下一个循环
		# 3.下一个区间和旧区间没有重合,则将旧区间的字符数加入结果,更新start和end为当前区间l,r
		# 循环结束后把最后一个区间的字符加入结果,之所以l<=end,而不是 < ,是考虑到初始区间0,0
        for item in di.values():
            l,r = item
            if l<=end:
                if r > end:
                    end = r
            elif l > end:
                ret.append(end-start+1)
                start,end=l,r
        ret.append(end-start+1)
        return ret