美文网首页
最小字母删除(swift5.3)

最小字母删除(swift5.3)

作者: 米米0311 | 来源:发表于2020-12-12 15:33 被阅读0次
【最小字母删除】
对于一个仅含有小写字母的字符串,定义一次删除操作:
选择字符串中最小的字母,若有多个相同字母,则选择最左边那个,将其从字符串中删除
给定字符串和正整数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)
  }

相关文章

网友评论

      本文标题:最小字母删除(swift5.3)

      本文链接:https://www.haomeiwen.com/subject/jiaegktx.html