LeetCode之Partition Labels(Kotlin)
阿新 • • 發佈:2018-12-13
問題: A string S of lowercase letters is given. We want to partition this string into as many parts as possible so that each letter appears in at most one part, and return a list of integers representing the size of these parts.
Example 1: Input: S = "ababcbacadefegdehijhklij" Output: [9,7,8] Explanation: The partition is "ababcbaca", "defegde", "hijhklij". This is a partition so that each letter appears in at most one part. A partition like "ababcbacadefegde", "hijhklij" is incorrect, because it splits S into less parts.
方法: 向右遍歷,當index與index所處位置字元的最右index相同時分組,當遍歷完所有字元後輸出即為結果。(我也知道不太好理解,看程式碼慢慢體會o(╯□╰)o)
具體實現:
class PartitionLabels { fun partitionLabels(S: String): List<Int> { val result = mutableListOf<Int>() val last = IntArray(26) for (i in S.indices) { last[S[i] - 'a'] = i } var j = 0 var anchor = 0 for (i in S.indices) { j = maxOf(j, last[S[i] - 'a']) if (i == j) { result.add(i - anchor + 1) anchor = i + 1 } } return result } } fun main(args: Array<String>) { val partitionLabels = PartitionLabels() var string = "ababcbacadefegdehijhklij" println(partitionLabels.partitionLabels(string)) }
有問題隨時溝通