mirror of
https://github.com/halfrost/LeetCode-Go.git
synced 2025-07-07 09:54:57 +08:00
Add solution 830
This commit is contained in:
@ -5,7 +5,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func Test_Problem147(t *testing.T) {
|
func Test_Problem146(t *testing.T) {
|
||||||
obj := Constructor(2)
|
obj := Constructor(2)
|
||||||
fmt.Printf("obj = %v\n", MList2Ints(&obj))
|
fmt.Printf("obj = %v\n", MList2Ints(&obj))
|
||||||
obj.Put(1, 1)
|
obj.Put(1, 1)
|
||||||
|
@ -0,0 +1,15 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
func largeGroupPositions(S string) [][]int {
|
||||||
|
res, end := [][]int{}, 0
|
||||||
|
for end < len(S) {
|
||||||
|
start, str := end, S[end]
|
||||||
|
for end < len(S) && S[end] == str {
|
||||||
|
end++
|
||||||
|
}
|
||||||
|
if end-start >= 3 {
|
||||||
|
res = append(res, []int{start, end - 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
@ -0,0 +1,57 @@
|
|||||||
|
package leetcode
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
type question830 struct {
|
||||||
|
para830
|
||||||
|
ans830
|
||||||
|
}
|
||||||
|
|
||||||
|
// para 是参数
|
||||||
|
// one 代表第一个参数
|
||||||
|
type para830 struct {
|
||||||
|
S string
|
||||||
|
}
|
||||||
|
|
||||||
|
// ans 是答案
|
||||||
|
// one 代表第一个答案
|
||||||
|
type ans830 struct {
|
||||||
|
one [][]int
|
||||||
|
}
|
||||||
|
|
||||||
|
func Test_Problem830(t *testing.T) {
|
||||||
|
|
||||||
|
qs := []question830{
|
||||||
|
|
||||||
|
{
|
||||||
|
para830{"abbxxxxzzy"},
|
||||||
|
ans830{[][]int{{3, 6}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para830{"abc"},
|
||||||
|
ans830{[][]int{{}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para830{"abcdddeeeeaabbbcd"},
|
||||||
|
ans830{[][]int{{3, 5}, {6, 9}, {12, 14}}},
|
||||||
|
},
|
||||||
|
|
||||||
|
{
|
||||||
|
para830{"aba"},
|
||||||
|
ans830{[][]int{{}}},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
fmt.Printf("------------------------Leetcode Problem 830------------------------\n")
|
||||||
|
|
||||||
|
for _, q := range qs {
|
||||||
|
_, p := q.ans830, q.para830
|
||||||
|
fmt.Printf("【input】:%v 【output】:%v\n", p, largeGroupPositions(p.S))
|
||||||
|
}
|
||||||
|
fmt.Printf("\n\n\n")
|
||||||
|
}
|
80
leetcode/0830.Positions-of-Large-Groups/README.md
Normal file
80
leetcode/0830.Positions-of-Large-Groups/README.md
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
# [830. Positions of Large Groups](https://leetcode.com/problems/positions-of-large-groups/)
|
||||||
|
|
||||||
|
|
||||||
|
## 题目
|
||||||
|
|
||||||
|
In a string `s` of lowercase letters, these letters form consecutive groups of the same character.
|
||||||
|
|
||||||
|
For example, a string like `s = "abbxxxxzyy"` has the groups `"a"`, `"bb"`, `"xxxx"`, `"z"`, and `"yy"`.
|
||||||
|
|
||||||
|
A group is identified by an interval `[start, end]`, where `start` and `end` denote the start and end indices (inclusive) of the group. In the above example, `"xxxx"` has the interval `[3,6]`.
|
||||||
|
|
||||||
|
A group is considered **large** if it has 3 or more characters.
|
||||||
|
|
||||||
|
Return *the intervals of every **large** group sorted in **increasing order by start index***.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abbxxxxzzy"
|
||||||
|
Output: [[3,6]]
|
||||||
|
Explanation: "xxxx" is the only large group with start index 3 and end index 6.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abc"
|
||||||
|
Output: []
|
||||||
|
Explanation: We have groups "a", "b", and "c", none of which are large groups.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abcdddeeeeaabbbcd"
|
||||||
|
Output: [[3,5],[6,9],[12,14]]
|
||||||
|
Explanation: The large groups are "ddd", "eeee", and "bbb".
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 4:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "aba"
|
||||||
|
Output: []
|
||||||
|
```
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
- `1 <= s.length <= 1000`
|
||||||
|
- `s` contains lower-case English letters only.
|
||||||
|
|
||||||
|
## 题目大意
|
||||||
|
|
||||||
|
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
|
||||||
|
|
||||||
|
找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
|
||||||
|
|
||||||
|
## 解题思路
|
||||||
|
|
||||||
|
- 简单题。利用滑动窗口的思想,先扩大窗口的右边界,找到能相同字母且能到达的最右边。记录左右边界。再将窗口的左边界移动到上一次的右边界处。以此类推,重复扩大窗口的右边界,直至扫完整个字符串。最终所有满足题意的较大分组区间都在数组中了。
|
||||||
|
|
||||||
|
## 代码
|
||||||
|
|
||||||
|
```go
|
||||||
|
package leetcode
|
||||||
|
|
||||||
|
func largeGroupPositions(S string) [][]int {
|
||||||
|
res, end := [][]int{}, 0
|
||||||
|
for end < len(S) {
|
||||||
|
start, str := end, S[end]
|
||||||
|
for end < len(S) && S[end] == str {
|
||||||
|
end++
|
||||||
|
}
|
||||||
|
if end-start >= 3 {
|
||||||
|
res = append(res, []int{start, end - 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
```
|
@ -0,0 +1,80 @@
|
|||||||
|
# [830. Positions of Large Groups](https://leetcode.com/problems/positions-of-large-groups/)
|
||||||
|
|
||||||
|
|
||||||
|
## 题目
|
||||||
|
|
||||||
|
In a string `s` of lowercase letters, these letters form consecutive groups of the same character.
|
||||||
|
|
||||||
|
For example, a string like `s = "abbxxxxzyy"` has the groups `"a"`, `"bb"`, `"xxxx"`, `"z"`, and `"yy"`.
|
||||||
|
|
||||||
|
A group is identified by an interval `[start, end]`, where `start` and `end` denote the start and end indices (inclusive) of the group. In the above example, `"xxxx"` has the interval `[3,6]`.
|
||||||
|
|
||||||
|
A group is considered **large** if it has 3 or more characters.
|
||||||
|
|
||||||
|
Return *the intervals of every **large** group sorted in **increasing order by start index***.
|
||||||
|
|
||||||
|
**Example 1:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abbxxxxzzy"
|
||||||
|
Output: [[3,6]]
|
||||||
|
Explanation: "xxxx" is the only large group with start index 3 and end index 6.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 2:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abc"
|
||||||
|
Output: []
|
||||||
|
Explanation: We have groups "a", "b", and "c", none of which are large groups.
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 3:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "abcdddeeeeaabbbcd"
|
||||||
|
Output: [[3,5],[6,9],[12,14]]
|
||||||
|
Explanation: The large groups are "ddd", "eeee", and "bbb".
|
||||||
|
```
|
||||||
|
|
||||||
|
**Example 4:**
|
||||||
|
|
||||||
|
```
|
||||||
|
Input: s = "aba"
|
||||||
|
Output: []
|
||||||
|
```
|
||||||
|
|
||||||
|
**Constraints:**
|
||||||
|
|
||||||
|
- `1 <= s.length <= 1000`
|
||||||
|
- `s` contains lower-case English letters only.
|
||||||
|
|
||||||
|
## 题目大意
|
||||||
|
|
||||||
|
在一个由小写字母构成的字符串 s 中,包含由一些连续的相同字符所构成的分组。例如,在字符串 s = "abbxxxxzyy" 中,就含有 "a", "bb", "xxxx", "z" 和 "yy" 这样的一些分组。分组可以用区间 [start, end] 表示,其中 start 和 end 分别表示该分组的起始和终止位置的下标。上例中的 "xxxx" 分组用区间表示为 [3,6] 。我们称所有包含大于或等于三个连续字符的分组为 较大分组 。
|
||||||
|
|
||||||
|
找到每一个 较大分组 的区间,按起始位置下标递增顺序排序后,返回结果。
|
||||||
|
|
||||||
|
## 解题思路
|
||||||
|
|
||||||
|
- 简单题。利用滑动窗口的思想,先扩大窗口的右边界,找到能相同字母且能到达的最右边。记录左右边界。再将窗口的左边界移动到上一次的右边界处。以此类推,重复扩大窗口的右边界,直至扫完整个字符串。最终所有满足题意的较大分组区间都在数组中了。
|
||||||
|
|
||||||
|
## 代码
|
||||||
|
|
||||||
|
```go
|
||||||
|
package leetcode
|
||||||
|
|
||||||
|
func largeGroupPositions(S string) [][]int {
|
||||||
|
res, end := [][]int{}, 0
|
||||||
|
for end < len(S) {
|
||||||
|
start, str := end, S[end]
|
||||||
|
for end < len(S) && S[end] == str {
|
||||||
|
end++
|
||||||
|
}
|
||||||
|
if end-start >= 3 {
|
||||||
|
res = append(res, []int{start, end - 1})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
|
```
|
@ -396,6 +396,7 @@ headless: true
|
|||||||
- [0819.Most-Common-Word]({{< relref "/ChapterFour/0819.Most-Common-Word.md" >}})
|
- [0819.Most-Common-Word]({{< relref "/ChapterFour/0819.Most-Common-Word.md" >}})
|
||||||
- [0826.Most-Profit-Assigning-Work]({{< relref "/ChapterFour/0826.Most-Profit-Assigning-Work.md" >}})
|
- [0826.Most-Profit-Assigning-Work]({{< relref "/ChapterFour/0826.Most-Profit-Assigning-Work.md" >}})
|
||||||
- [0828.COPYRIGHT-PROBLEM-XXX]({{< relref "/ChapterFour/0828.COPYRIGHT-PROBLEM-XXX.md" >}})
|
- [0828.COPYRIGHT-PROBLEM-XXX]({{< relref "/ChapterFour/0828.COPYRIGHT-PROBLEM-XXX.md" >}})
|
||||||
|
- [0830.Positions-of-Large-Groups]({{< relref "/ChapterFour/0830.Positions-of-Large-Groups.md" >}})
|
||||||
- [0832.Flipping-an-Image]({{< relref "/ChapterFour/0832.Flipping-an-Image.md" >}})
|
- [0832.Flipping-an-Image]({{< relref "/ChapterFour/0832.Flipping-an-Image.md" >}})
|
||||||
- [0834.Sum-of-Distances-in-Tree]({{< relref "/ChapterFour/0834.Sum-of-Distances-in-Tree.md" >}})
|
- [0834.Sum-of-Distances-in-Tree]({{< relref "/ChapterFour/0834.Sum-of-Distances-in-Tree.md" >}})
|
||||||
- [0836.Rectangle-Overlap]({{< relref "/ChapterFour/0836.Rectangle-Overlap.md" >}})
|
- [0836.Rectangle-Overlap]({{< relref "/ChapterFour/0836.Rectangle-Overlap.md" >}})
|
||||||
|
Reference in New Issue
Block a user