双指针做法
创建两个指针i,j分别记录子串的尾部和头部
子串的长度即为i-j+1
创建一个a数组记录子串中每个字母出现的次数
然后通过i指针不断右移获取最长不含npy的子串
当check()到npy同时出现时,j指针右移直至n、p或y中一个为0
class Solution {
public:
int a[30];//记录每个字母出现次数
/**
*判断npy三个字符是否同时存在
*/
bool check(){
return a['n'-'a']&&a['p'-'a']&&a['y'-'a'];
}
int Maximumlength(string x) {
// write code here
int ans = 0;
int len = x.length();
for(int i=0,j=0;i<len;i++){
a[x[i]-'a']++;
while(check()){ //j指针后移,直到npy不同时存在为止
a[x[j]-'a']--;
j++;
}
ans = max(ans,i-j+1);//取最长区间
}
return ans;
}
};
京公网安备 11010502036488号