【最小字母刪除】
對于一個僅含有小寫字母的字符串,定義一次刪除操作:
選擇字符串中最小的字母防症,若有多個相同字母补憾,則選擇最左邊那個妈嘹,將其從字符串中刪除
給定字符串和正整數(shù)k,輸出進行k次刪除操作之后的字符串結果
輸入描述
一個僅含有小寫字母的字符串s
k
輸出描述
進行k次刪除操作之后的字符串
【示例】
輸入
s = "abcdrtb"
k = 3
輸出
"cdrt"
邊界: 如果k >= s的長度潦刃,返回空字符串
直接上代碼
func deleteMinString(_ s: String, _ k: Int) -> String {
var sArray: [Character] = Array(s)
var dict: [Character: Int] = [:]
//一次遍歷統(tǒng)計每個字符出現(xiàn)的次數(shù)
for sub in sArray {
if let value = dict[sub] {
dict[sub] = value + 1
} else {
dict[sub] = 1
}
}
var k = k
//字典的keys從a-z排序,上面dict其實也可以直接從a到z先創(chuàng)建一個所有字母只出現(xiàn)0次的字典,這樣就不需要這個排序了
let keys: [Character] = dict.keys.sorted()
//記錄當前要刪除的字母的下標
var index: Int = 0
//需要做刪除的條件
while k > 0 {
let key = keys[index]
if let value = dict[key],
value > 0,
let dex = sArray.firstIndex(of: key) {
//刪除最小字母
sArray.remove(at: dex)
if value == 1 {
//某一字母刪除完畢后移動下標(記錄下一個要刪除字母的下標)
index += 1
}
dict[key] = value - 1
}
k -= 1
}
return String(sArray)
}