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