圧縮するin-placeアルゴリズムを使用して、文字の集合を考えます。
圧縮後の長さは、常に、元の配列の長さ以下でなければなりません。
配列の各要素は、1つの文字(整数int型)の長さであるべきです。
入力配列のin situ変更が完了した後、配列の新しい長さを返します。
例1:
输入:
[ "A"、 "A"、 "B"、 "B"、 "C"、 "C"、 "C"]
出力:
戻り6、入力配列の最初の6文字は次のようになります[ "A"、 "2 "、 "B"、 "2"、 "C"、 "3"]
説明:
"AA"の代わりに"A2"です。「BB」は、「B2」に置き換えられます。「CCC」は、「C3」に置き換えられます。
例2:
入力:
[ "A"]
出力:
1を返し、文字入力配列をする必要があります前に:[「A」]
説明:
いいえ文字列を置換されていません。
ソリューション:
func compress(_ chars: inout [Character]) -> Int {
let count:Int = chars.count
guard count > 0 else {
return 0
}
var result:String = ""
var first:Character = chars[0] as Character
var charCount:Int = 0
for i in 0..<count {
let temp:Character = chars[i] as Character
if temp == first {
charCount += 1
} else {
result.append(first)
if charCount > 1 {
result.append("\(charCount)")
}
first = temp
charCount = 1
}
}
result.append(first)
if charCount > 1 {
result.append("\(charCount)")
}
return result.count
}