当前位置: 首页 > news >正文

763划分字母区间解题记录

先用贪心做一做。题目可以翻译为——在确保当前部分的所有字母都不再出现在后面的前提下,尽早分割。但是怎么确保当前部分的所有字母都不再出现呢?我们可以**记录每个字母最后出现的位置,然后一旦这个字符串包含的字符都在某个范围内结束了,立马分割。**就我现在而言感觉这个思路比较难想到。

func partitionLabels(s string) []int {
    // 每个字符的距离记录到map
    m := make(map[rune]int, 26)
    for i,v := range s {
        m[v] = i
    }

    start := 0 // 本次字符串起始位置
    maxi := 0 // 已经包含的字符最长在哪里结束
    var res []int
    for i,v := range s {
        maxi = max(maxi, m[v])
        if i==maxi {
            res = append(res, maxi-start+1)
            start = maxi+1
        }
    }

    return res
}

也可以用哈希表+滑动窗口来做。先记录下每个字母的出现次数,然后对滑动窗口中的每个字母判断次数是否用尽为 0,如果这个窗口内的所有字母次数都为 0,这个窗口就是符合条件的窗口。时间复杂度为 O(n)

func partitionLabels(s string) []int {
    m := make(map[byte]int, 0)
    for _, v := range s {
        m[byte(v)]++
    }

    // 判断目前滑动窗口内有哪些字母
    visit := make([]bool,26) // 使用后不用置0,因为后续不会在出现以前使用过的字符了

    res := make([]int, 0)
    lastlen := 0
    for i:=0; i<len(s); i++ {
        m[s[i]]--
        visit[s[i]-'a'] = true
        sum := 0 // 当字符串被分离出去时,所有被vistied的map都应该是0
        for j, v := range visit {
            if v {
                sum += m[byte('a'+j)]
            }
        }
        if sum == 0 {
            res = append(res, (i+1) - lastlen)
            lastlen = i+1
        }
    } 

    return res
}
http://www.dtcms.com/a/98825.html

相关文章:

  • java基础:常见类和对象
  • 游戏被外挂攻破?金融数据遭篡改?AI反作弊系统实战方案(代码+详细步骤)
  • Linux|gitlab|二进制快速安装部署gitlab-ce教程
  • 19_20 js es6
  • std::countr_zero
  • 模型苏醒计划:Threejs 让静态模型「叛逆」起来
  • Java.util.logging (JUL) 终极指南:从基础配置到高级玩法
  • 外观模式_结构型_GOF23
  • 游戏引擎学习第192天
  • 第三卷:覆舟山决战(73-108回)正反人物群像
  • 习题1.43
  • 软件工程面试题(十一)
  • 【数据结构】队列
  • el-radio-group 中 el-radio-button value未能绑定上数值数据
  • 欢乐力扣:合并两个有序链表
  • Redis6数据结构之List类型
  • 25_闭包节流防抖
  • Gateway实战(三)、断言-时间、Cookie信息
  • 从零开始研发GPS接收机连载——16、接收天上卫星信号成功定位
  • Python之变量与数据类型总结
  • Linux C语言调用第三方库,第三方库如何编译安装
  • Android 12系统源码_输入系统(四)触摸异常问题排查
  • nginx 设置隐藏版本号
  • 【LangChain入门 9 Agent 】LangChain开发Agent智能体
  • 当模板方法模式遇上工厂模式:一道优雅的烹饪架构设计
  • 【Qt】ffmpeg编码—存储(H264)
  • 链路聚合技术
  • 基于Spring Boot的戒烟网站的设计与实现(LW+源码+讲解)
  • 每日OJ题_剑指offer数组篇(剑指offer04+剑指offer11+剑指offer21)
  • 深度学习 Deep Learning 第12章 深度学习的主流应用