【最小字母删除】
对于一个仅含有小写字母的字符串,定义一次删除操作:
选择字符串中最小的字母,若有多个相同字母,则选择最左边那个,将其从字符串中删除
给定字符串和正整数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] = [:]
//一次遍历统计每个字符出现的次数
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先创建一个所有字母只出现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)
}