解题思路
遍历一遍字符串x筛掉多余的字符的同时记录字符串中b的个数。利用双指针,从新的字符串s的头和尾分别找a和c的位置,在定位的过程中可以筛掉中间的b,在两边拥有同等数量的a和c时,判断中间剩余的b是否能和a和c的组成特殊的子序列,能的话就更新len。
代码
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param x string字符串
* @return int整型
*/
int Maximumlength(string x) {
string s;
int l, r, na, nb = 0, nc;
for (int i = 0; i < x.length(); i++) {
if (x[i] == 'a' || x[i] == 'b' || x[i] == 'c') {
if (x[i] == 'b') nb++;
s += x[i];
}
}
l = 0, r = s.length() - 1;
na = nc = 0;
int len = 0;
while (l < r) {
while (s[l] != 'a') {
if (s[l] == 'b') {
nb--;
}
l++;
}
if (s[l] == 'a') na++;
while (s[r] != 'c') {
if (s[r] == 'b') {
nb--;
}
r--;
}
if (s[r] == 'c') nc++;
if (l < r && nc == na) {
if (nb >= na) len = na;
l++;
r--;
} else {
break;
}
}
return 3 * len;
}
}; 
京公网安备 11010502036488号