总的来说就是一轮一轮的扫描,一旦发现顺序不是XYZ这种,就开始重新一轮
每一轮用count[]来记当前轮,用max[]来记录历史上最多的
具体如下:
比如XXYY XYYZ YYZ XYY XXYYZ就是5轮:
1. XXYY
2. XYYZ
3. YYZ
4. XYY
5. XXYYZ
每次发现ch[i] < ch[i - 1]就表示顺序不对了,开始新的一轮,count全部清空
max[0]表示历史上X^的最大次数
max[1]表示历史上XY^的最大次数
max[2]表示历史上XYZ^的最大次数
public class Solution {
public int getK(String B) {
char[] ch = B.toCharArray();
int n = B.length();
int[] count = new int[3];
int[] max = new int[3];
for (int i = 0; i < n; i++) {
if (i == 0 || ch[i - 1] > ch[i]) { //顺序不对就清空重新计数
count[0] = 0;
count[1] = 0;
count[2] = 0;
}
switch(ch[i]) {
case 'X': {
count[0]++;
max[0] = Math.max(max[0],count[0]);
break;
}
case 'Y': {
if (count[1] < max[0]) { //X够了才计Y
count[1]++;
max[1] = Math.max(max[1],count[1]);
break;
}
}
case 'Z': {
if (count[2] < max[1]) {//XY够了才计Z
count[2]++;
max[2] = Math.max(max[2],count[2]);
break;
}
}
}
}
return max[2];
}
}
谁来帮忙想个妖孽的测试集吧!
XYXXYZXXYXZYZZZYXX
自己跑出不对了,应该返回3才对,跪了
啊啊,突然被这句话打败了:
A可能有重复的char