题目描述
牛牛现在有一个长度为len只包含小写字母‘a’-'z’的字符串x,他现在想要一个特殊的子序列,这个子序列的长度为3n(n为非负整数),子序列的第[1,n]个字母全部为‘a’,子序列的[n+1,2n]个字母全部为‘b’,子序列的[2n+1,3n]个字母全部为‘c’,牛牛想知道最长的符合条件的独特子序列的长度是多少。
public class maxnumlength {
public int solve (String x) {
// write code here
int result=0;
char[] charx=x.toCharArray();
StringBuilder s=new StringBuilder();
int nb=0;
for (int i = 0; i < charx.length; i++) {
char c=charx[i];
if (c=='a'||c=='b'||c=='c') {
s.append(c);
if(c=='b') nb++;
}
}
//双指针法,筛选b,一组一组的找
int l=0,r=s.length()-1,na=0,nc=0;
while (l<r) {
//找a
while (s.charAt(l)!='a') {
//筛选b
if (s.charAt(l)=='b') {
nb--;
}
l++;
}
if (s.charAt(l)=='a') {
na++;
}
//找c
while (s.charAt(r)!='c') {
//筛选b
if (s.charAt(r)=='b') {
nb--;
}
r--;
}
if (s.charAt(r)=='c') {
nc++;
}
//判断是否存在nb,使得na==nb==nc
if (l<r&&na==nc) {
if (nb>=na) {
result=na;
}
l++;
r--;
}
else {
break;
}
}
return result*3;
}
public static void main(String[] args) {
maxnumlength ma=new maxnumlength();
String x="abaabbcccc";
int result=ma.solve(x);
System.out.println(result);
}
}