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

Golang | Leetcode Golang题解之第438题找到字符串中所有字母异位词

题目:

题解:

func findAnagrams(s, p string) (ans []int) {
    sLen, pLen := len(s), len(p)
    if sLen < pLen {
        return
    }

    count := [26]int{}
    for i, ch := range p {
        count[s[i]-'a']++
        count[ch-'a']--
    }

    differ := 0
    for _, c := range count {
        if c != 0 {
            differ++
        }
    }
    if differ == 0 {
        ans = append(ans, 0)
    }

    for i, ch := range s[:sLen-pLen] {
        if count[ch-'a'] == 1 { // 窗口中字母 s[i] 的数量与字符串 p 中的数量从不同变得相同
            differ--
        } else if count[ch-'a'] == 0 { // 窗口中字母 s[i] 的数量与字符串 p 中的数量从相同变得不同
            differ++
        }
        count[ch-'a']--

        if count[s[i+pLen]-'a'] == -1 { // 窗口中字母 s[i+pLen] 的数量与字符串 p 中的数量从不同变得相同
            differ--
        } else if count[s[i+pLen]-'a'] == 0 { // 窗口中字母 s[i+pLen] 的数量与字符串 p 中的数量从相同变得不同
            differ++
        }
        count[s[i+pLen]-'a']++

        if differ == 0 {
            ans = append(ans, i+1)
        }
    }
    return
}

http://www.kler.cn/news/327648.html

相关文章:

  • vue2与vue3知识点
  • 尾矿库安全监测系统:守护矿山安全的关键技术
  • 蛋白质结构中模型的提取
  • CSS 效果:实现动态展示双箭头
  • Android Button “No speakable text present” 问题解决
  • CUDA Dynamic Parallelism测试
  • Django-form表单
  • 【JAVA高级】如何使用Redis加锁和解锁(二)做分布式锁案例(防误删锁)
  • https访问报错:net::ERR_CERT_DATE_INVALLD
  • 【Simulink仿真】两级式三相光伏并网发电系统
  • Linux启动mysql报错
  • 【QT Quick】C++交互:QML对象操作
  • Linux应急响应技巧整理
  • 如何确定光纤用几芯 用光纤与网线区别在哪里
  • TensorRT-LLM高级用法
  • 五子棋双人对战项目(1)——WebSocket介绍
  • ubuntu 开启root
  • 太速科技-FMCJ457-基于JESD204B的2路2Gsps AD 2路2Gsps DA FMC子卡
  • LED驱动电路
  • SQL | 查询带有单引号的异常数据和replace与insert插入的区别
  • YOLO11震撼发布!
  • 《Python编程:从入门到实践》数据可视化
  • Linux操作系统中Redis
  • 从源码中学习动态代理模式
  • SpringBoot自定义异常
  • Webpack 4 优化指南:提升构建性能与加载速度
  • 服务器被挂马,导致网站首页被更改怎么解决
  • css的选择器及优先级
  • 在树莓派上基于 LNMP 搭建 Nextcloud
  • Leetcode 206. 反转链表