怕npy的牛牛
怕npy的牛牛
https://ac.nowcoder.com/acm/contest/9556/B
双指针做法
创建两个指针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; } };