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;
}
}
若觉得本文章对你有用,欢迎用爱发电资助。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。