D120 830. Positions of Large Groups

题目链接

830. Positions of Large Groups

题目分析

给定一个字符串,返回相同字母连续出现次数超过3次的始末值。

解决思路

我采用的是,先放进数组,连续则递增结束的下标。若遇到不同字母,则先判断上一个字母的终点下标减起始下标是否小于3则删除,大于等于3则保留。

在for循环外再判断一次最后一对下标是否也符合要求。因为之前是在当遇到不同字母时判断的,若测试样例中只出现了同一个字符,那么就进不去判断长度的代码中。

最终代码

<?php
class Solution {

    /**
     * @param String $S
     * @return Integer[][]
     */
    function largeGroupPositions($S) {
        $largeGroup = [[0,0]];
        $S = str_split($S);
        $prev = "";
        $index = 0;
        foreach($S as $k => $v){
            $cur = $largeGroup[$index];
            if($v == $prev){
                $cur[1]++;
                $largeGroup[$index] = $cur;
            }
            else{
                if($cur[1]-$cur[0]<2){
                    $largeGroup[$index] = [$k,$k];
                }
                else{
                    $index++;
                    $largeGroup[] = [$k, $k];
                }
            }
            
            $prev = $v;
        }
        if($largeGroup[$index][1]-$largeGroup[$index][0]<2){
            unset($largeGroup[$index]);
        }
        return $largeGroup;
    }
}

若觉得本文章对你有用,欢迎用爱发电资助。


skys215
42 声望26 粉丝