【LeetCode】0830.較大分組的位置
阿新 • • 發佈:2021-01-06
技術標籤:—— LeetCode ——演算法字串leetcode
題目要求
- 判斷較大分組(所有包含大於或等於三個連續字元的分組)
- 將所有較大分組的其實位置和終點位置返回結果
圖解示例
本題其實是一個線性查詢問題,依次遍歷字串中每個字元即可
演算法思想
查詢類演算法
- 將當前字元與前一個字元比較,若相同,
len++
- 若當前數是第一次出現,即
len == 1
,記錄開始位置start
- 若與前一個數不相同,記錄前一個值的終點位置
end
- 判斷
len
是否大於等於3
- 若大於等於
3
,將start
和end
壓入答案,並將len
回到初始狀態,即len = 1
- 否則,將
len
回到初始狀態 - 注意,需要判斷字串
s
第5步
完整程式碼
class Solution { public: vector<vector<int> > largeGroupPositions(string s) { vector<vector<int> > ans; vector<int> tmp; int start = 0; int end = 0; int len = 1; for(int i = 1; i < s.size(); i++) { if(s[i]==s[i-1]) { if(len==1) start = i - 1; len++; } else { end = i - 1; if(len >= 3) { tmp.clear(); tmp.push_back(start); tmp.push_back(end); ans.push_back(tmp); } len = 1; } } if(len >= 3) { end = s.size() - 1; tmp.clear(); tmp.push_back(start); tmp.push_back(end); ans.push_back(tmp); } return ans; } };
設計分析
時間複雜度:O(n)
空間複雜度:O(1)
提交結果
若有其他解法,歡迎評論區補充。