【leetcode】763. Partition Labels

不超时已经满足。。11.48%

class Solution(object):
    def partitionLabels(self, S):
        """
        :type S: str
        :rtype: List[int]
        """
        s_list = list(S)
        lenth = len(s_list)
        result = []
        def split_list(lists):
            l_len = len(lists)
            cnt = 0
            for index,char in enumerate(lists):
                index2 = l_len-1-lists[::-1].index(char)
                if index2==index:
                    result.append(1)
                    cnt += 1
                else:
                    break
            return [cnt,index2]

        start = 0
        while(True):
            [cnt,index1] = split_list(s_list)
            if index1==(lenth-1):
                if index1+1-cnt > 0:
                    result.append(index1+1-cnt)
                return result
            index2 = 0
            a = cnt
            b = index1
            choose = 1
            save_index2 = 0
            while(True):
                for i in s_list[a:b]:
                    index = lenth-1-(s_list[::-1].index(i))
                    index2 = index if index>index2 else index2
                if choose==1 or index2>save_index2:
                    a = b
                    b = index2
                    choose = 0
                else:
                    break
                save_index2 = index2
            result.append(index2+1-cnt)
            if index2==(lenth-1):
                break
            elif index2==(lenth-2):
                result.append(1)
                break
            start = index2+1
            s_list = s_list[start:]
            lenth = len(s_list)
        return result

---------------------------

89.22%  多积累把  尤其是dict去重好好利用   greedy

class Solution(object):
    def partitionLabels(self, S):
        """
        :type S: str
        :rtype: List[int]
        """
        result = []
        anchor = 0
        j = 0
        last = {char:i for i,char in enumerate(S)}
        for i,char in enumerate(S):
            j = max(j,last[char])
            if i==j:
                result.append(j-anchor+1)
                anchor = i+1
        return result

-----------------------------------------

print set([1,4,3,2,3,3])     #set([1,2,3,4])

print set([1,4,3,2,3,3]) & set([3,4,5,6,7])     #set([3,4])

5.74%

class Solution(object):
    def partitionLabels(self, S):
        """
        :type S: str
        :rtype: List[int]
        """
        result = []
        while S:
            i = 1
            while(set(S[:i])&set(S[i:])):
                i += 1
            result.append(i)
            S = S[i:]
        return result




猜你喜欢

转载自blog.csdn.net/u014381464/article/details/80749339