leetcode-day22-較大分組的位置[830]

之前一直在Leetcode里面做完未記錄,今天又想起來記錄下,是因為一道題有時候用了多種方法寫,在leetcode里面看不方便,既然想起來還是記錄下吧。


image.png

解法一: 利用棧的思路
思路: 將s轉(zhuǎn)成數(shù)組,加入棧中,如果加入的字符和棧中最后一個字符相同,則累加,直到累加超過3,則加入結(jié)果數(shù)組里,這里存在一個大于3的時候重復(fù)添加的過程,所以最近結(jié)果數(shù)組再去重。
這樣寫內(nèi)存消耗比較大!

let stack = [], resArr = [], resArr2 = [];
    let arr = s.split('');
    let i = -1, num = 1;
    while(arr.length > 0){
        i++;
        let item = arr.shift();
        if(stack[stack.length - 1] && stack[stack.length - 1] === item){
            num++;
            if(num>=3){
                resArr[1] = i;
                resArr2.push(resArr);
            }
        }else{
            num = 1;
            resArr = []
            resArr[0] = i;
            stack.push(item);
        }
    }
    return [...new Set(resArr2)];

解法二: 雙指針法
思路:定義前后指針都為0,當(dāng)前一個元素和后一個相同的時候,讓后指針先走,直到出現(xiàn)元素和前一個元素不同的時候,統(tǒng)計后指針是否比前指針多走了2步,如果是,則將前后指針步數(shù)加入結(jié)果數(shù)組。同時在不同的時候?qū)⑶昂笾羔樀牟綌?shù)與當(dāng)前位置i保持統(tǒng)一。

  let start = end = 0;
    let res = [];
    for(let i=0;i<s.length;i++){
        if(s[i] === s[i+1]){
            end++
        }else{
            if(end - start >=2){
                res.push([start, end]);
            }
            start = end = i+1;
        }
    }
    return res;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這里是劍指offer的一些筆記,有幾道困難題沒做,以后會不上,題解是按照做題序號來的。 數(shù)組中重復(fù)的數(shù)字 新建一個...
    周飛飛飛機閱讀 469評論 0 0
  • 830. 較大分組的位置 問題 在一個由小寫字母構(gòu)成的字符串 S 中,包含由一些連續(xù)的相同字符所構(gòu)成的分組。例如,...
    王可尊閱讀 372評論 0 0
  • 題目鏈接難度:簡單 類型: 雙指針 在一個由小寫字母構(gòu)成的字符串 S 中,包含由一些連續(xù)的相同...
    wzNote閱讀 288評論 0 1
  • 本文內(nèi)容為練習(xí)LeetCode題目時的解題思路和不同算法的記錄,實現(xiàn)語言為C++,代碼保存在Github,均已在L...
    SK木眠閱讀 1,106評論 0 0
  • leetcode熱題 HOT 100第二部分題解,按照題目序號排列。 二叉樹的層序遍歷 正常的層序遍歷操作即可,但...
    周飛飛飛機閱讀 1,116評論 0 1

友情鏈接更多精彩內(nèi)容