1. 程式人生 > 其它 >【LeetCode】0830.較大分組的位置

【LeetCode】0830.較大分組的位置

技術標籤:—— LeetCode ——演算法字串leetcode

題目要求

  1. 判斷較大分組(所有包含大於或等於三個連續字元的分組)
  2. 將所有較大分組的其實位置和終點位置返回結果

圖解示例

本題其實是一個線性查詢問題,依次遍歷字串中每個字元即可

演算法思想

查詢類演算法

  1. 將當前字元與前一個字元比較,若相同,len++
  2. 若當前數是第一次出現,即 len == 1,記錄開始位置 start
  3. 若與前一個數不相同,記錄前一個值的終點位置 end
  4. 判斷 len 是否大於等於 3
  5. 若大於等於 3,將 startend 壓入答案,並將 len 回到初始狀態,即 len = 1
  6. 否則,將 len 回到初始狀態
  7. 注意,需要判斷字串 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)

提交結果




若有其他解法,歡迎評論區補充。