@@ -75,7 +75,13 @@ ABBBB<strong><em>B</em></strong>BBAA -> ABBBBBBAA
75
75
76
76
<!-- 这里可写通用的实现逻辑 -->
77
77
78
- 统计字符串中连续出现 3 个 'A' 或 3 个 'B' 的个数,分别记为 cnt1, cnt2。只要 cnt1 大于 cnt2,返回 true,否则返回 false。
78
+ ** 方法一:计数**
79
+
80
+ 统计字符串 ` colors ` 中连续出现 $3$ 个 ` 'A' ` 或 $3$ 个 ` 'B' ` 的个数,分别记为 $a$ 和 $b$。
81
+
82
+ 最后判断 $a$ 是否大于 $b$,是则返回 ` true ` ,否则返回 ` false ` 。
83
+
84
+ 时间复杂度 $O(n)$,空间复杂度 $O(1)$。其中 $n$ 为字符串 ` colors ` 的长度。
79
85
80
86
<!-- tabs:start -->
81
87
@@ -87,19 +93,13 @@ ABBBB<strong><em>B</em></strong>BBAA -> ABBBBBBAA
87
93
class Solution :
88
94
def winnerOfGame (self , colors : str ) -> bool :
89
95
a = b = 0
90
- cnt1 = cnt2 = 0
91
- for c in colors:
92
- if c == ' A' :
93
- a += 1
94
- if a > 2 :
95
- cnt1 += 1
96
- b = 0
97
- else :
98
- b += 1
99
- if b > 2 :
100
- cnt2 += 1
101
- a = 0
102
- return cnt1 > cnt2
96
+ for c, v in groupby(colors):
97
+ m = len (list (v)) - 2
98
+ if m > 0 and c == ' A' :
99
+ a += m
100
+ elif m > 0 and c == ' B' :
101
+ b += m
102
+ return a > b
103
103
```
104
104
105
105
### ** Java**
@@ -109,24 +109,22 @@ class Solution:
109
109
``` java
110
110
class Solution {
111
111
public boolean winnerOfGame (String colors ) {
112
+ int n = colors. length();
112
113
int a = 0 , b = 0 ;
113
- int cnt1 = 0 , cnt2 = 0 ;
114
- for (char c : colors. toCharArray()) {
115
- if (c == ' A' ) {
116
- ++ a;
117
- if (a > 2 ) {
118
- ++ cnt1;
119
- }
120
- b = 0 ;
121
- } else {
122
- ++ b;
123
- if (b > 2 ) {
124
- ++ cnt2;
114
+ for (int i = 0 , j = 0 ; i < n; i = j) {
115
+ while (j < n && colors. charAt(j) == colors. charAt(i)) {
116
+ ++ j;
117
+ }
118
+ int m = j - i - 2 ;
119
+ if (m > 0 ) {
120
+ if (colors. charAt(i) == ' A' ) {
121
+ a += m;
122
+ } else {
123
+ b += m;
125
124
}
126
- a = 0 ;
127
125
}
128
126
}
129
- return cnt1 > cnt2 ;
127
+ return a > b ;
130
128
}
131
129
}
132
130
```
@@ -137,20 +135,22 @@ class Solution {
137
135
class Solution {
138
136
public:
139
137
bool winnerOfGame(string colors) {
138
+ int n = colors.size();
140
139
int a = 0, b = 0;
141
- int cnt1 = 0, cnt2 = 0;
142
- for (char& c : colors) {
143
- if (c == 'A') {
144
- ++a;
145
- if (a > 2) ++cnt1;
146
- b = 0;
147
- } else {
148
- ++b;
149
- if (b > 2) ++cnt2;
150
- a = 0;
140
+ for (int i = 0, j = 0; i < n; i = j) {
141
+ while (j < n && colors[ j] == colors[ i] ) {
142
+ ++j;
143
+ }
144
+ int m = j - i - 2;
145
+ if (m > 0) {
146
+ if (colors[ i] == 'A') {
147
+ a += m;
148
+ } else {
149
+ b += m;
150
+ }
151
151
}
152
152
}
153
- return cnt1 > cnt2 ;
153
+ return a > b ;
154
154
}
155
155
};
156
156
```
@@ -159,23 +159,22 @@ public:
159
159
160
160
```go
161
161
func winnerOfGame(colors string) bool {
162
- var a, b, cnt1, cnt2 int
163
- for _, c := range colors {
164
- if c == 'A' {
165
- a++
166
- if a > 2 {
167
- cnt1++
168
- }
169
- b = 0
170
- } else {
171
- b++
172
- if b > 2 {
173
- cnt2++
162
+ n := len(colors)
163
+ a, b := 0, 0
164
+ for i, j := 0, 0; i < n; i = j {
165
+ for j < n && colors[j] == colors[i] {
166
+ j++
167
+ }
168
+ m := j - i - 2
169
+ if m > 0 {
170
+ if colors[i] == 'A' {
171
+ a += m
172
+ } else {
173
+ b += m
174
174
}
175
- a = 0
176
175
}
177
176
}
178
- return cnt1 > cnt2
177
+ return a > b
179
178
}
180
179
```
181
180
0 commit comments