From 71b030cf637506c1e4bcd69da36262cc0e891eca Mon Sep 17 00:00:00 2001 From: YDZ Date: Tue, 5 Jan 2021 12:01:21 +0800 Subject: [PATCH] Add solution 830 --- .../0146.LRU-Cache/146. LRU Cache_test.go | 2 +- .../830. Positions of Large Groups.go | 15 ++++ .../830. Positions of Large Groups_test.go | 57 +++++++++++++ .../0830.Positions-of-Large-Groups/README.md | 80 +++++++++++++++++++ .../0830.Positions-of-Large-Groups.md | 80 +++++++++++++++++++ website/content/menu/index.md | 1 + 6 files changed, 234 insertions(+), 1 deletion(-) create mode 100644 leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups.go create mode 100644 leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups_test.go create mode 100644 leetcode/0830.Positions-of-Large-Groups/README.md create mode 100644 website/content/ChapterFour/0830.Positions-of-Large-Groups.md diff --git a/leetcode/0146.LRU-Cache/146. LRU Cache_test.go b/leetcode/0146.LRU-Cache/146. LRU Cache_test.go index 27747f8c..9d8d1604 100644 --- a/leetcode/0146.LRU-Cache/146. LRU Cache_test.go +++ b/leetcode/0146.LRU-Cache/146. LRU Cache_test.go @@ -5,7 +5,7 @@ import ( "testing" ) -func Test_Problem147(t *testing.T) { +func Test_Problem146(t *testing.T) { obj := Constructor(2) fmt.Printf("obj = %v\n", MList2Ints(&obj)) obj.Put(1, 1) diff --git a/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups.go b/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups.go new file mode 100644 index 00000000..8b61b338 --- /dev/null +++ b/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups.go @@ -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 +} diff --git a/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups_test.go b/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups_test.go new file mode 100644 index 00000000..ed74b05a --- /dev/null +++ b/leetcode/0830.Positions-of-Large-Groups/830. Positions of Large Groups_test.go @@ -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") +} diff --git a/leetcode/0830.Positions-of-Large-Groups/README.md b/leetcode/0830.Positions-of-Large-Groups/README.md new file mode 100644 index 00000000..5323f2e0 --- /dev/null +++ b/leetcode/0830.Positions-of-Large-Groups/README.md @@ -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 +} +``` \ No newline at end of file diff --git a/website/content/ChapterFour/0830.Positions-of-Large-Groups.md b/website/content/ChapterFour/0830.Positions-of-Large-Groups.md new file mode 100644 index 00000000..5323f2e0 --- /dev/null +++ b/website/content/ChapterFour/0830.Positions-of-Large-Groups.md @@ -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 +} +``` \ No newline at end of file diff --git a/website/content/menu/index.md b/website/content/menu/index.md index 807ff8b8..f45c90a7 100644 --- a/website/content/menu/index.md +++ b/website/content/menu/index.md @@ -396,6 +396,7 @@ headless: true - [0819.Most-Common-Word]({{< relref "/ChapterFour/0819.Most-Common-Word.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" >}}) + - [0830.Positions-of-Large-Groups]({{< relref "/ChapterFour/0830.Positions-of-Large-Groups.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" >}}) - [0836.Rectangle-Overlap]({{< relref "/ChapterFour/0836.Rectangle-Overlap.md" >}})