贪心算法_划分字母区间

'字符串 S 由小写字母组成。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。返回一个表示每个字符串片段的长度的列表。
'示例:
'输入: s = "ababcbacadefegdehijhklij"
'输出:[9,7,8] 解释: 划分结果为 "ababcbaca", "defegde", "hijhklij"。 每个字母最多出现在一个片段中。 像 "ababcbacadefegde", "hijhklij" 的划分是错误的,因为划分的片段数较少。
Public list As New Collection

Sub 贪心算法_划分字母区间()
    te = VBA.Asc("a")
    s = "ababcbacadefegdehijhklij"
    Call partitionLabels(s)
    For Each e In list
        Debug.Print e
    Next
    Set list = Nothing
End Sub

Public Sub partitionLabels(s)
    chars = toCharArray(s)
    Dim edge(25)
    For i = 0 To UBound(chars)
        Index = VBA.Asc(chars(i)) - VBA.Asc("a")
        edge(Index) = i
    Next
    idx = 0
    last = -1
    For i = 0 To UBound(chars)
        idx = Application.Max(idx, edge(VBA.Asc(chars(i)) - VBA.Asc("a")))
        If i = idx Then
            list.Add (i - last)
            last = i
        End If
    Next
End Sub

Function toCharArray(s)
    Dim arr()
    For x = 1 To Len(s)
        ReDim Preserve arr(0 To x - 1)
        arr(x - 1) = Mid(s, x, 1)
    Next
    toCharArray = arr
End Function

 

posted @ 2022-12-10 14:21  依云科技  阅读(40)  评论(0)    收藏  举报