HELLO,各位看官大大好,我是阿呆 🙈🙈🙈
工作原因拖更些時日,今天阿呆繼續記錄下力扣刷題過程,收錄在專欄算法中 😜😜😜
該專欄按照不同類別標簽進行刷題,每個標簽又分為 Easy、Medium、Hard 三個等級 👊👊👊
本部分所有題目均來自于LeetCode 網,并于每道題目下標明具體力扣網原題鏈接 🏃🏃🏃
OK,兄弟們,廢話不多直接上題,沖沖沖 🌞🌞🌞
830. 較大分組的位置
在一個由小寫字母構成的字符串s
中,包含由一些連續的相同字符所構成的分組
例如,在字符串s = "abbxxxxzyy"
中,就含有"a"
,"bb"
,"xxxx"
,"z"
和"yy"
這樣的一些分組
分組可以用區間[start, end]
表示,其中start
和end
分別表示該分組的起始和終止位置的下標。上例中的"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
僅含小寫英文字母解決問題第一步,當然先提取題目字面上的關鍵信息 😎😎😎
稱包含大于或等于三個連續字符的分組為較大分組 = 連續意味著前者和后者進行比較 🌷🌷🌷
提取完題目中的關鍵信息后,直接進入第二階段,思路整理 😃😃😃
一次遍歷
① 遍歷該序列,并記錄當前分組長度
② 如果下一個字符與當前字符不同,或者已遍歷至字符串尾部
③ 且該分組長度大于等于 3,則將其加入結果集 🌸🌸🌸
整理完解題思路后,直接進入第三階段,代碼實現 😃😃😃
按照我們剛才的破題思路,直接代碼走起來 👇👇👇👇
class Solution {
public:
vector>largeGroupPositions(string s) {
vector>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; //返回結果集
}
};
看完 👀👀👀 全注釋版的代碼實現后,相信看官大大對整體邏輯已經是大寫的 OK 了 😃😃😃
那么我們挖掘上述實現的晦澀細節 😖😖😖 進行解析,直接開干,走起來 👇👇👇👇
if (i == n - 1 || s[i] != s[i + 1]) //若遍歷至結尾或當前字符與下一個不一致
對于結尾的特殊處理,也可在循環外進行
很直白的題,無特殊點,核心是看到連續就應聯想到前者和后者比較 🐳🐳🐳
為方便各位看官大大了解博主真實刷題過程,我把當時狀態純純真實還原,記錄在心路歷程這一小節,不感興趣的小伙伴可以直接跳過哈
博主在第一階段提取 🚀 關鍵信息沒有問題,在第二階段 🚀 思路整理未聯想到前者和后者比較 😭😭😭
代碼實現時未聯想到i - num + 1
,即為前者索引(front)
;未聯想到前者和后者比較,使用了移動字符代替(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) { //若當前位置不再連續
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);
}
身處于這個浮躁的社會,卻有耐心看到這里,你一定是個很厲害的人吧 👍👍👍
如果各位看官大大覺得文章有幫助的話,別忘了點贊 + 關注哦,你們的鼓勵就是我大的動力
博主還會不斷更新更優質的內容,加油吧!技術人! 💪💪💪
你是否還在尋找穩定的海外服務器提供商?創新互聯www.cdcxhl.cn海外機房具備T級流量清洗系統配攻擊溯源,準確流量調度確保服務器高可用性,企業級服務器適合批量采購,新人活動首月15元起,快前往官網查看詳情吧
網站欄目:刷爆力扣之較大分組的位置-創新互聯
本文鏈接:http://vcdvsql.cn/article24/dsdgce.html
成都網站建設公司_創新互聯,為您提供網站制作、全網營銷推廣、品牌網站建設、電子商務、微信公眾號、網站改版
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯