HELLO,各位看官大大好,我是阿呆 🙈🙈🙈
工作原因拖更些時(shí)日,今天阿呆繼續(xù)記錄下力扣刷題過程,收錄在專欄算法中 😜😜😜
該專欄按照不同類別標(biāo)簽進(jìn)行刷題,每個(gè)標(biāo)簽又分為 Easy、Medium、Hard 三個(gè)等級(jí) 👊👊👊
本部分所有題目均來自于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]
表示,其中start
和end
分別表示該分組的起始和終止位置的下標(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
僅含小寫英文字母解決問題第一步,當(dāng)然先提取題目字面上的關(guān)鍵信息 😎😎😎
稱包含大于或等于三個(gè)連續(xù)字符的分組為較大分組 = 連續(xù)意味著前者和后者進(jìn)行比較 🌷🌷🌷
提取完題目中的關(guān)鍵信息后,直接進(jìn)入第二階段,思路整理 😃😃😃
一次遍歷
① 遍歷該序列,并記錄當(dāng)前分組長(zhǎng)度
② 如果下一個(gè)字符與當(dāng)前字符不同,或者已遍歷至字符串尾部
③ 且該分組長(zhǎng)度大于等于 3,則將其加入結(jié)果集 🌸🌸🌸
整理完解題思路后,直接進(jìn)入第三階段,代碼實(shí)現(xiàn) 😃😃😃
按照我們剛才的破題思路,直接代碼走起來 👇👇👇👇
class Solution {
public:
vector>largeGroupPositions(string s) {
vector>ret; //定義結(jié)果集
int n = s.size(); //初始化字符串長(zhǎng)度
int num = 1; //定義分組長(zhǎng)度
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}); //且分組長(zhǎng)度為3,則記錄
num = 1; //將分組長(zhǎng)度重置
} else {
num++; //當(dāng)前字符與下一個(gè)一致,將分組長(zhǎng)度加加
}
}
return ret; //返回結(jié)果集
}
};
看完 👀👀👀 全注釋版的代碼實(shí)現(xiàn)后,相信看官大大對(duì)整體邏輯已經(jīng)是大寫的 OK 了 😃😃😃
那么我們挖掘上述實(shí)現(xiàn)的晦澀細(xì)節(jié) 😖😖😖 進(jìn)行解析,直接開干,走起來 👇👇👇👇
if (i == n - 1 || s[i] != s[i + 1]) //若遍歷至結(jié)尾或當(dāng)前字符與下一個(gè)不一致
對(duì)于結(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)想到前者和后者比較,使用了移動(dòng)字符代替(moveElemOfStr)
簡(jiǎn)潔性差 ,代碼如下 👇👇👇👇
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);
}
身處于這個(gè)浮躁的社會(huì),卻有耐心看到這里,你一定是個(gè)很厲害的人吧 👍👍👍
如果各位看官大大覺得文章有幫助的話,別忘了點(diǎn)贊 + 關(guān)注哦,你們的鼓勵(lì)就是我大的動(dòng)力
博主還會(huì)不斷更新更優(yōu)質(zhì)的內(nèi)容,加油吧!技術(shù)人! 💪💪💪
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧
網(wǎng)站欄目:刷爆力扣之較大分組的位置-創(chuàng)新互聯(lián)
本文鏈接:http://m.rwnh.cn/article24/dsdgce.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站制作、全網(wǎng)營(yíng)銷推廣、品牌網(wǎng)站建設(shè)、電子商務(wù)、微信公眾號(hào)、網(wǎng)站改版
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)