跳到主要内容

830.较大分组的位置

链接:830.较大分组的位置
难度:Easy
标签:字符串
简介:在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。

题解 1 - typescript

  • 编辑时间:2021-01-05
  • 执行用时:100ms
  • 内存消耗:42.1MB
  • 编程语言:typescript
  • 解法介绍:遍历后对每一项进行判断是否符合条件。
function largeGroupPositions(s: string): number[][] {
const len = s.length;
const ans: number[][] = [];
const comp = (index: number): number => {
const c = s[index];
let count = 1;
let i = index + 1;
for (; i < len; i++)
if (s[i] === c) count++;
else break;
if (count < 3) return index;
const nextI = index + count - 1;
ans.push([index, nextI]);
return nextI;
};
for (let i = 0; i < len; i++) i = comp(i);
return ans;
}

题解 2 - typescript

  • 编辑时间:2021-01-05
  • 执行用时:136ms
  • 内存消耗:42.5MB
  • 编程语言:typescript
  • 解法介绍:从后往前遍历。
function largeGroupPositions(s: string): number[][] {
const len = s.length;
const ans: number[][] = [];
let startI = len - 1;
for (let i = startI - 1; i >= 0; i--) {
if (i === 0 && s[i] === s[startI]) {
startI - i + 1 >= 3 && ans.unshift([i, startI]);
} else if (s[i] !== s[startI]) {
startI - i >= 3 && ans.unshift([i + 1, startI]);
startI = i;
}
}
return ans;
}