刷爆力扣之较大分组的位置

news2024/11/24 11:05:43

刷爆力扣之较大分组的位置

HELLO,各位看官大大好,我是阿呆 🙈🙈🙈
工作原因拖更些时日,今天阿呆继续记录下力扣刷题过程,收录在专栏算法中 😜😜😜

请添加图片描述

该专栏按照不同类别标签进行刷题,每个标签又分为 Easy、Medium、Hard 三个等级 👊👊👊

本部分所有题目均来自于LeetCode 网,并于每道题目下标明具体力扣网原题链接 🏃🏃🏃

OK,兄弟们,废话不多直接上题,冲冲冲 🌞🌞🌞


一 🏠 题目描述

830. 较大分组的位置

在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组

例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z""yy" 这样的一些分组

分组可以用区间 [start, end] 表示,其中 startend 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6]

我们称所有包含大于或等于三个连续字符的分组为 较大分组

找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果

示例 1:

输入:s = "abbxxxxzzy"
输出:[[3,6]]
解释:"xxxx" 是一个起始于 3 且终止于 6 的较大分组。

示例 2:

输入:s = "abc"
输出:[]
解释:"a","b" 和 "c" 均不是符合要求的较大分组。

示例 3:

输入:s = "abcdddeeeeaabbbcd"
输出:[[3,5],[6,9],[12,14]]
解释:较大分组为 "ddd", "eeee" 和 "bbb"

示例 4:

输入:s = "aba"
输出:[]

提示:

  • 1 <= s.length <= 1000
  • s 仅含小写英文字母

二 🏠破题思路

2.1 🚀 关键信息

解决问题第一步,当然先提取题目字面上的关键信息 😎😎😎

称包含大于或等于三个连续字符的分组为较大分组 = 连续意味着前者和后者进行比较 🌷🌷🌷


提取完题目中的关键信息后,直接进入第二阶段,思路整理 😃😃😃


2.2 🚀 思路整理

一次遍历

① 遍历该序列,并记录当前分组长度

如果下一个字符与当前字符不同,或者已遍历至字符串尾部

③ 且该分组长度大于等于 3,则将其加入结果集 🌸🌸🌸


整理完解题思路后,直接进入第三阶段,代码实现 😃😃😃


三 🏠 代码详解

3.1 🚀 代码实现

按照我们刚才的破题思路,直接代码走起来 👇👇👇👇

class Solution {
public:
    vector<vector<int>> largeGroupPositions(string s) {
        vector<vector<int>> ret; //定义结果集
        int n = s.size(); //初始化字符串长度
        int num = 1; //定义分组长度
        for (int i = 0; i < n; i++) {
            if (i == n - 1 || s[i] != s[i + 1]) { //若遍历至结尾或当前字符与下一个不一致
                if (num >= 3) ret.push_back({i - num + 1, i}); //且分组长度为3,则记录
                num = 1; //将分组长度重置
            } else {
                num++; //当前字符与下一个一致,将分组长度加加
            }
        }
        return ret; //返回结果集
    }
};

3.2 🚀 细节解析

看完 👀👀👀 全注释版的代码实现后,相信看官大大对整体逻辑已经是大写的 OK 了 😃😃😃

那么我们挖掘上述实现的晦涩细节 😖😖😖 进行解析,直接开干,走起来 👇👇👇👇

if (i == n - 1 || s[i] != s[i + 1]) //若遍历至结尾或当前字符与下一个不一致

对于结尾的特殊处理,也可在循环外进行

很直白的题,无特殊点,核心是看到连续就应联想到前者和后者比较 🐳🐳🐳


四 🏠 心路历程

为方便各位看官大大了解博主真实刷题过程,我把当时状态纯纯真实还原,记录在心路历程这一小节,不感兴趣的小伙伴可以直接跳过哈

博主在第一阶段提取 🚀 关键信息没有问题,在第二阶段 🚀 思路整理未联想到前者和后者比较 😭😭😭

代码实现时未联想到 i - num + 1,即为前者索引 (front) ;未联想到前者和后者比较,使用了移动字符代替(moveElemOfStr) 简洁性差 ,代码如下 👇👇👇👇

vector<vector<int>> largeGroupPositions(string s) {
        std::vector<std::vector<int>> res;

        int len = s.size(), front = 0, count = 0;
        char moveElemOfStr = ' ';
        for (int i = 0; i < len; ++i) {
            if (s[i] != moveElemOfStr) { //若当前位置不再连续
                if (count >= 3) {
                    res.push_back({front, i - 1}); //若连续的元素超过三个
                }

                front = i; //记录连续元素的开始索引
                count = 1; //表示连续个数为 1
                moveElemOfStr = s[i]; //记录连续元素值
            } else {
                ++count;
            }

            if (i == len - 1 && count >= 3) res.push_back({front, i});
        }

        return std::move(res);
    }

五 🏠 结语

身处于这个浮躁的社会,却有耐心看到这里,你一定是个很厉害的人吧 👍👍👍

如果各位看官大大觉得文章有帮助的话,别忘了点赞 + 关注哦,你们的鼓励就是我最大的动力

博主还会不断更新更优质的内容,加油吧!技术人! 💪💪💪

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

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

相关文章

Java项目:SSM农业信息管理系统

作者主页&#xff1a;源码空间站2022 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 管理员角色包含以下功能&#xff1a; 管理员登陆,用户管理,新闻管理,留言列表查看等功能。 用户角色包含以下功能&#xff1a; 查看所有新闻,市…

免费分享20套微信小程序源码 源码免费下载【强烈推荐】

淘源码&#xff1a;国内知名的源码免费下载平台 微信小程序源码包括&#xff1a;商城系统、点餐外卖、垃圾分类、预约洗车、物业管理、校园跑腿、驾考学习、会议预约、图书管理、智能停车、在线答题等小程序源码。 源码分享&#xff0c;文末获取源码&#xff01; 1、JAVA微信…

微信API接口、微信二次开发API调用

微信API接口、微信二次开发API调用 微信协议接口调用-加微信好友及通过好友请求 加微信好友 /** * 微信自动添加好友 * author wechatno:tangjinjinwx * blog http://www.wlkankan.cn */ Async public void handleMsg(ChannelHandlerContext c…

代码随线录刷题|LeetCode 392.判断子序列 115.不同的子序列

目录 392.判断子序列 思路 1、确定dp数组 2、确定递推公式 3、初始化dp数组 4、遍历顺序 判断子序列 动态规划 双指针 115.不同的子序列 思路 1、确定dp数组 2、确定递推公式 3、初始化dp数组 4、遍历顺序 不同的子序列 392.判断子序列 题目链接&#xff1a;力扣 思路 比较简单…

【Exception】 Java Lambda List转换Map报错 触发异常 IllegalStateException: Duplicate key

【Exception】 Java Lambda List转换Map报错 触发异常 IllegalStateException: Duplicate key 一、问题描述 在使用Java8 lambda 将List转换为Map时&#xff0c;遇到报错&#xff1a;IllegalStateException- Duplicate key .... 具体报错信息如下&#xff1a; java.lang.Illega…

基于Dockerfile创建镜像

目录 一、Docker镜像的创建 1 基于现有镜像创建 2 基于本地模板创建 3 基于Dockerfile 创建 3.1 联合文件系统(UnionFS ) 3.2 镜像加载原理 二、Dockerfile 操作命令的指令 1 FROM 镜像 2 MAINTAINER 名字 3 RUN 命令 4 ENTRYPOINT 5 CMD ENTRYPOINT和CMD的区别&…

HTML网页设计【足球科普】学生DW静态网页设计

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

【openWrt】设置执行定时任务

遇到一个问题&#xff0c;使用openWrt软路由搭建服务器&#xff0c;在docker装了一个maccmsV10&#xff0c;需要每天执行cj信息定时任务&#xff0c;但是maccmsV10本身不支持执行定时任务的配置的。 看了下&#xff0c;openWrt是支持本身是linux系统&#xff0c;所以是可以设…

糟糕,数据库异常不可用怎么办?

摘要&#xff1a;糟糕&#xff0c;数据库异常不可用怎么办&#xff1f;挺着急的&#xff0c;在线等。本文分享自华为云社区《糟糕&#xff0c;数据库异常不可用怎么办&#xff1f;》&#xff0c;作者&#xff1a;GaussDB 数据库。 随着数字化转型的加速&#xff0c;数据量爆发…

获取鼠标在画布中的位置

获取鼠标在画布中的位置 效果展示 概述 本文讲解如何实现我们平时用的画布软件中&#xff0c;怎么获取的我们鼠标时刻在画布中的位置。 构建HTML框架 <body><div class"box"></div> </body>CSS样式 <style>.box {/* 设置盒子…

IDEA 2022.3 发布,终于支持 redis 了

IntelliJ IDEA 发布了最新2022.3版本&#xff0c;本次更新&#xff1a;可以通过设置切换到新 UI&#xff0c;即可预览焕然一新的 IDE 外观。引入了一个新的 Settings Sync&#xff08;设置同步&#xff09;解决方案&#xff0c;用于同步和备份自定义用户设置。此外&#xff0c;…

私域运营对于企业的重要性

企业进行私域流量的精细化运营&#xff0c;不仅可以打造属于企业自己的社群王国&#xff0c;还可以挖掘存量客户的价值&#xff0c;实现更智能的客户管理和个性化运营方案。 前言 相信每个人都对瑞幸咖啡略有耳闻&#xff0c;这个国产咖啡品牌曾一度被封神&#xff0c;但随着财…

【leetcode】2404. 出现最频繁的偶数元素(js实现)

1. 题目 2404. 出现最频繁的偶数元素 2. 思路 创建哈希表&#xff0c;统计偶数的出现次数将哈希表转换成数组&#xff0c;遍历哈希表&#xff0c;设置res的初始值为[-1&#xff0c;0]&#xff0c;第一个值为偶数值&#xff0c;第二个值为这个偶数出现的次数&#xff1b;如果…

探花交友_第3章_完善个人信息(新版)

探花交友_第3章_完善个人信息(新版) 文章目录探花交友_第3章_完善个人信息(新版)课程介绍1. 完善用户信息1.1 阿里云OSS1.1.1 概述1.1.2 账号申请购买服务创建Bucket1.1.3 抽取模板工具OssPropertiesOssTemplateTanhuaAutoConfiguration1.1.4 测试1.2 百度人脸识别1.2.1 概述1.…

PyCharm+PyQT5之四第二个QT程序

前面程序实现了逻辑分离&#xff0c;第二个QT程序将建立控件之间的关联&#xff0c;并自行撰写&#xff0c;事件。 首先&#xff0c;建立只有一个按钮的界面 点击工具栏编辑信号与槽&#xff0c;按钮带有红框并拖拽&#xff0c;这样间建立了按钮与dialog的槽信号。 按钮一般是…

【OpenCV学习】第7课:形态学操作-膨胀与腐蚀

仅自学做笔记用,后续有错误会更改 理论 图像形态学操作-基于形状的一系列图像处理操作的合集, 主要是基于集合论基础上的形态学数学形态学有4个基本操作:膨胀丶腐蚀丶开丶闭膨胀与腐蚀是图像处理中最常用的形态学操作手段 形态学操作(morphology operators)-膨胀 跟前边的卷…

行者AI解析内容审核平台中的图像检测技术原理

本文首发&#xff1a;行者AI谛听 近些年&#xff0c;监管部分对于平台的信息方面&#xff0c;越来越严格&#xff0c;继而有很多企业选择智能AI内容审核服务&#xff0c;帮助企业快速处理平台上一些违规内容。 很多人不懂这方面到底属于什么&#xff0c;今天行者AI就来为大家解…

【Python】python入门,这一篇就够了

快速入门/一文免挂Python程序元素变量python中的符号Python的程序结构分支结构异常处理循环结构Python函数python中的可变参数python中的全局变量和局部变量组合数据类型之序列类型序列通用操作字符串&#xff08;str&#xff09;字符串常用函数字符串类型的格式化列表&#xf…

Qt第三十一章:渐变QGradient

线性渐变&#xff1a;QLinearGradient class TestGradient(QWidget):def __init__(self, parentNone):super(TestGradient, self).__init__(parent)self.resize(300, 300)label QLabel(self)label.setGeometry(0, 0, 300, 300)"""线形渐变"""la…

802.11基础——术语及缩略语

目录 WiFi LAN&#xff08;局域网&#xff09; WAN&#xff08;广域网&#xff09; WLAN&#xff08;Wireless LAN&#xff0c;即无线局域网&#xff09; AP&#xff08;Access point的简称&#xff0c;即访问点&#xff0c;接入点&#xff09; Station&#xff08;工作站…