刷爆力扣之較大分組的位置-創(chuàng)新互聯(lián)

刷爆力扣之較大分組的位置

HELLO,各位看官大大好,我是阿呆 🙈🙈🙈
工作原因拖更些時(shí)日,今天阿呆繼續(xù)記錄下力扣刷題過程,收錄在專欄算法中 😜😜😜

成都創(chuàng)新互聯(lián)專注于烏拉特中網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供烏拉特中營銷型網(wǎng)站建設(shè),烏拉特中網(wǎng)站制作、烏拉特中網(wǎng)頁設(shè)計(jì)、烏拉特中網(wǎng)站官網(wǎng)定制、成都微信小程序服務(wù),打造烏拉特中網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供烏拉特中網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

請?zhí)砑訄D片描述

該專欄按照不同類別標(biāo)簽進(jìn)行刷題,每個(gè)標(biāo)簽又分為 Easy、Medium、Hard 三個(gè)等級 👊👊👊

本部分所有題目均來自于LeetCode 網(wǎng),并于每道題目下標(biāo)明具體力扣網(wǎng)原題鏈接 🏃🏃🏃

OK,兄弟們,廢話不多直接上題,沖沖沖 🌞🌞🌞


一 🏠 題目描述

830. 較大分組的位置

在一個(gè)由小寫字母構(gòu)成的字符串s中,包含由一些連續(xù)的相同字符所構(gòu)成的分組

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

分組可以用區(qū)間[start, end]表示,其中startend分別表示該分組的起始和終止位置的下標(biāo)。上例中的"xxxx"分組用區(qū)間表示為[3,6]

我們稱所有包含大于或等于三個(gè)連續(xù)字符的分組為 較大分組

找到每一個(gè) 較大分組 的區(qū)間,按起始位置下標(biāo)遞增順序排序后,返回結(jié)果

示例 1:

輸入:s = "abbxxxxzzy"
輸出:[[3,6]]
解釋:"xxxx" 是一個(gè)起始于 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 🚀 關(guān)鍵信息

解決問題第一步,當(dāng)然先提取題目字面上的關(guān)鍵信息 😎😎😎

稱包含大于或等于三個(gè)連續(xù)字符的分組為較大分組 = 連續(xù)意味著前者和后者進(jìn)行比較 🌷🌷🌷


提取完題目中的關(guān)鍵信息后,直接進(jìn)入第二階段,思路整理 😃😃😃


2.2 🚀 思路整理

一次遍歷

① 遍歷該序列,并記錄當(dāng)前分組長度

② 如果下一個(gè)字符與當(dāng)前字符不同,或者已遍歷至字符串尾部

③ 且該分組長度大于等于 3,則將其加入結(jié)果集 🌸🌸🌸


整理完解題思路后,直接進(jìn)入第三階段,代碼實(shí)現(xiàn) 😃😃😃


三 🏠 代碼詳解 3.1 🚀 代碼實(shí)現(xiàn)

按照我們剛才的破題思路,直接代碼走起來 👇👇👇👇

class Solution {
public:
    vector>largeGroupPositions(string s) {
        vector>ret; //定義結(jié)果集
        int n = s.size(); //初始化字符串長度
        int num = 1; //定義分組長度
        for (int i = 0; i< n; i++) {
            if (i == n - 1 || s[i] != s[i + 1]) { //若遍歷至結(jié)尾或當(dāng)前字符與下一個(gè)不一致
                if (num >= 3) ret.push_back({i - num + 1, i}); //且分組長度為3,則記錄
                num = 1; //將分組長度重置
            } else {
                num++; //當(dāng)前字符與下一個(gè)一致,將分組長度加加
            }
        }
        return ret; //返回結(jié)果集
    }
};

3.2 🚀 細(xì)節(jié)解析

看完 👀👀👀 全注釋版的代碼實(shí)現(xiàn)后,相信看官大大對整體邏輯已經(jīng)是大寫的 OK 了 😃😃😃

那么我們挖掘上述實(shí)現(xiàn)的晦澀細(xì)節(jié) 😖😖😖 進(jìn)行解析,直接開干,走起來 👇👇👇👇

if (i == n - 1 || s[i] != s[i + 1]) //若遍歷至結(jié)尾或當(dāng)前字符與下一個(gè)不一致

對于結(jié)尾的特殊處理,也可在循環(huán)外進(jìn)行

很直白的題,無特殊點(diǎn),核心是看到連續(xù)就應(yīng)聯(lián)想到前者和后者比較 🐳🐳🐳


四 🏠 心路歷程

為方便各位看官大大了解博主真實(shí)刷題過程,我把當(dāng)時(shí)狀態(tài)純純真實(shí)還原,記錄在心路歷程這一小節(jié),不感興趣的小伙伴可以直接跳過哈

博主在第一階段提取 🚀 關(guān)鍵信息沒有問題,在第二階段 🚀 思路整理未聯(lián)想到前者和后者比較 😭😭😭

代碼實(shí)現(xiàn)時(shí)未聯(lián)想到i - num + 1,即為前者索引(front);未聯(lián)想到前者和后者比較,使用了移動字符代替(moveElemOfStr)簡潔性差 ,代碼如下 👇👇👇👇

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

        int len = s.size(), front = 0, count = 0;
        char moveElemOfStr = ' ';
        for (int i = 0; i< len; ++i) {
            if (s[i] != moveElemOfStr) { //若當(dāng)前位置不再連續(xù)
                if (count >= 3) {
                    res.push_back({front, i - 1}); //若連續(xù)的元素超過三個(gè)
                }

                front = i; //記錄連續(xù)元素的開始索引
                count = 1; //表示連續(xù)個(gè)數(shù)為 1
                moveElemOfStr = s[i]; //記錄連續(xù)元素值
            } else {
                ++count;
            }

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

        return std::move(res);
    }

五 🏠 結(jié)語

身處于這個(gè)浮躁的社會,卻有耐心看到這里,你一定是個(gè)很厲害的人吧 👍👍👍

如果各位看官大大覺得文章有幫助的話,別忘了點(diǎn)贊 + 關(guān)注哦,你們的鼓勵就是我大的動力

博主還會不斷更新更優(yōu)質(zhì)的內(nèi)容,加油吧!技術(shù)人! 💪💪💪

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:刷爆力扣之較大分組的位置-創(chuàng)新互聯(lián)
本文鏈接:http://bm7419.com/article24/dsdgce.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、全網(wǎng)營銷推廣品牌網(wǎng)站建設(shè)、電子商務(wù)微信公眾號、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站建設(shè)網(wǎng)站維護(hù)公司