替换子串得到平衡字符串[map计数+滑动窗口]

news2024/11/15 12:35:45

滑动窗口

  • 前言
  • 一、替换子串得到平衡字符串
  • 二、map计数+滑动窗口
  • 总结
  • 参考文献

前言

对于子串问题,确定左边界和有边界,就能确定一个子串,暴力取子串,时间复杂度O(n2)。有时挖掘内在规律的限定,或者问题所限定,就可以采用滑动窗口寻找子串,时间复杂度O(n)。

一、替换子串得到平衡字符串

在这里插入图片描述

二、map计数+滑动窗口

// 目的:待替换子串的最小可能长度
// 这个子串里应该包含超过len(s) >> 2的字符串的多余个数。
// 确定一个最小窗口,使得外面的每种字符都小于n/4即可(更简单的逆向判断)。
// 滑动窗口

func balancedString(s string) int {
    // 初始化每个字符对应的数组下标,便于统计。
    fx := map[byte]int{'Q':0,'W':1,'E':2,'R':3}
    // 记录每个字符出现的次数
    cnt := [4]int{}
    for i := 0;i < len(s);i++ {
        cnt[fx[s[i]]]++
    }
    
    n := len(s) >> 2
    // 已经平衡
    if isOk(cnt,n) {
        return 0
    }
    // 滑窗记录最小替换子串
    left,right,m := 0,0,len(s)
    for ;right < len(s);right++ {
        cnt[fx[s[right]]]--
        if !isOk(cnt,n) {
            continue
        }
        // 一旦圈住了多余的字符,就移动左边界,寻找最短多余子串。
        for ;left <= right && isOk(cnt,n);left++ {
            cnt[fx[s[left]]]++ 
        }
        // 记录最短可替换多余子串。
        m = min(m,right - left + 2)
    }
    return m
}
// 窗口外的每类字符数是否都不超过n
func isOk(cnt [4]int,n int) bool {
    for _,v := range cnt {
        if v > n {
            return false
        }
    } 
    return true
}
func min(x,y int) int {
    if x < y {
        return x
    }
    return y
}

总结

1)问题转换,通过对字符的计数,以及计数的修改,来判断字符内外的情况。
2)逆向判定,通过窗口外的字符情况,来判断窗口内是否包含了所有多余字符,再左边界右滑,把可替换子串压缩到最小。
3)选择的可能性很多,我们需要挖掘其中规律及限定,来计算有效的可能性。例如O(n)的滑窗就oK了,而不是O(n方)来确定子串是否有效。

参考文献

[1] LeetCode 替换子串得到平衡字符串

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/343151.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue笔记(1)——数据代理与绑定

一、初始Vue 1.想让Vue工作&#xff0c;就必须创建一个Vue实例&#xff0c;且要传入一个配置对象&#xff1b; 2.root容器里的代码依然符合html规范&#xff0c;只不过混入了一些特殊的Vue语法&#xff1b; 3.root容器里的代码被称为【Vue模板】&#xff1b; 4.Vue实例和容器是…

教育行业需要什么样的客服系统?

某教育公司拥有素质教育、成人教育、智慧教育等多个业务板块&#xff0c;日常通过电商、线上媒体、线上线下授课等方式进行业务开展和品牌宣传&#xff0c;取得了非常不错的成绩&#xff0c;受到了很多人的好评反馈。 对于这样一个教育公司&#xff0c;客户来源广泛&#xff0…

SpringBoot 使用 Spark

文章目录读取 txt 文件读取 csv 文件读取 MySQL 数据库表读取 Json 文件中文输出乱码前提&#xff1a; 可以参考文章 SpringBoot 接入 Spark SpringBoot 已经接入 Spark已配置 JavaSparkContext已配置 SparkSession Resource private SparkSession sparkSession;Resource pr…

机器学习算法:随机森林

在经典机器学习中&#xff0c;随机森林一直是一种灵丹妙药类型的模型。 该模型很棒有几个原因&#xff1a; 与许多其他算法相比&#xff0c;需要较少的数据预处理&#xff0c;因此易于设置充当分类或回归模型不太容易过度拟合可以轻松计算特征重要性在本文[1]中&#xff0c;我想…

【docker知识】从容器中如何访问到宿主机

一、说明 使用 Docker 能实现服务的容器化&#xff0c;并使用容器间网络在它们之间进行通信。有时您可能需要一个容器来与宿主机上非容器化的服务通信。以下是如何从 Docker 容器中访问本地主机或 127.0.0.1的具体方法。 二、方法1&#xff1a;简单的选择 适用于 Windows 和 Ma…

2023/2/13总结

今天主要学习了哈夫曼树。 哈夫曼树 哈夫曼树是二叉树的一种&#xff0c;它是一种WPL最优二叉树。 叶子结点&#xff08;也称叶节点&#xff09;&#xff1a;指的是自己下面不再连接有节点的节点&#xff08;即末端&#xff09;&#xff0c;称为叶子节点&#xff08;又称为终…

PDF内容提取器:ByteScout PDF Extractor SDK Crack

ByteScout PDF Extractor SDK – 用于 PDF 到 JSON、PDF 到 Excel、CSV、XML、从 .NET 和 ASP.NET 从 PDF 中提取文本的 PDF 提取器库 ByteScout PDF Extractor SDK – 用于 PDF 到 JSON、PDF 到 Excel、CSV、XML、从 .NET 和 ASP.NET 从 PDF 中提取文本的 PDF 提取器库​ ​ ​…

test4

网络层故障分析 一、 路由器故障 a.主要用途简述 b.故障 & 故障原因 & 解决方案 1&#xff09;路由器的部分功能无法实现 故障故障原因解决方案路由器配置完全正确&#xff0c;但是有些功能却不能实现。路由器的软件系统出现问题升级软件系统 2&#xff09;网络频繁…

ABC 289 G - Shopping in AtCoder store 数学推导+凸包

大意&#xff1a; n个顾客&#xff0c;每个人有一个购买的欲望bi,m件物品&#xff0c;每一件物品有一个价值ci,每一个顾客会买商品当且仅当bici>定价. 现在要求对每一个商品定价&#xff0c;求出它的最大销售值&#xff08;数量*定价&#xff09; n,m<2e5 思路&#x…

工程监测多通道振弦模拟信号采集仪VTN常规操作

工程监测多通道振弦模拟信号采集仪VTN常规操作 一、开关机 1、开机 VTN4XX 有四个开机途径&#xff0c;手动开机、自动定时开机和上电开机、信号触发开机。 上电开机&#xff1a;当“工作模式拨码开关” 第 4 位为 ON 时&#xff0c;直接连接外部电源即可开机。 自动开机&…

JAVA文件上传多方式

1.文件上传接收文件接口 通过post接口&#xff0c;上传文件 PostMapping(value "/uploadFile")ApiOperation(value "文件上传", notes "文件上传")public Result uploadFile(RequestParam (name "file") MultipartFile file) thr…

【知识图谱论文】Bi-Link:通过转换器和提示的对比学习桥接来自文本的归纳链接预测

文献题目&#xff1a;Bi-Link: Bridging Inductive Link Predictions from Text via Contrastive Learning of Transformers and Prompts发表期刊&#xff1a;WWW2023代码&#xff1a; https://anonymous.4open.science/r/Bi-Link-2277/. 摘要 归纳知识图的完成需要模型来理解…

如何通过 9 个简单步骤创建网站

您可以在 20 分钟内创建一个网站。您也不需要成为技术向导。不管是商务还是休闲。您不需要花哨的设计师或昂贵的开发人员。只需按照以下简单步骤操作&#xff0c;您就可以立即上线。 顶级虚拟主机提供商创建网站如果你想创建一个网站&#xff0c;你需要一个网络托管服务提供商。…

图机器学习

图机器学习1、图机器学习导论1.1图神经网络与普通神经网络的异同2、图的基本表示和特征工程2.1 图的基本表示2.1.1 图的本体设计2.1.2 图的种类2.1.3节点连接数&#xff08;度&#xff09;2.1.4图的基本表示&#xff08;邻接矩阵&#xff09;节点数量少使用2.1.5图的基本表示&a…

【GD32F427开发板试用】5. SPI驱动TFTLCD屏幕

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;hehung 之前发帖 【GD32F427开发板试用】1. 串口实现scanf输入控制LED 【GD32F427开发板试用】2. RT-Thread标准版移植 【GD32F427开发板试用…

IB学习者的培养目标有哪些?

IB课程强调要培养年轻人的探究精神&#xff0c;在富有渊博知识的同时&#xff0c;更要勤于思考&#xff0c;敢于思考&#xff0c;尊重和理解跨文化的差异&#xff0c;坚持原则维护公平&#xff0c;让这个世界充满爱与和平&#xff0c;让这个世界变得更加美好。上一次我们为大家…

编译原理—翻译方案、属性栈代码

系列文章戳这里&#x1f447; 什么是上下文无关文法、最左推导和最右推导如何判断二义文法及消除文法二义性何时需要消除左递归什么是句柄、什么是自上而下、自下而上分析什么是LL(1)、LR(0)、LR(1)文法、LR分析表LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系编译原理第三章习…

JavaSE学习day5_01 方法(也叫函数)

在学习方法之前&#xff0c;我们扩展一点关于数组的知识&#xff0c;就是数组的内存图;先看一张图&#xff1a; 可知一个程序在内存中运行时&#xff0c;内存是划分为几个区的&#xff0c;方法在栈区&#xff0c;看到new这个单词&#xff0c;在创建对象的时候会在内存中开辟一块…

如何做好多项目全生命周期的资源调配,提升资源利用效率?【橙子】

随着产品研发中心各团队承接的研发项目数量和规模日趋增加&#xff0c;人均产值和利润目标逐步提升&#xff0c;人均承接的项目数量也逐渐增加&#xff0c;目前缺乏合理的研发资源管理方案&#xff0c;存在多项目研发过程中资源冲突及部分项目研发人员忙闲不均等现象&#xff0…

微电影行业痛点解决方案

在当下新媒体时代&#xff0c;微电影作为“微文化”的载体&#xff0c;具有“微”的特点&#xff0c;经过短短数年的快速发展&#xff0c;并获得了受众广泛的关注和喜爱&#xff0c;对人们的休闲娱乐方式也产生较大的影响。但在迅猛发展的同时也存在一些行业痛点&#xff0c;诸…