怕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;
    }
};
全部评论

相关推荐

10-11 17:30
湖南大学 C++
我已成为0offer的糕手:羡慕
点赞 评论 收藏
分享
程序员猪皮:看不到八股什么意思
点赞 评论 收藏
分享
评论
3
收藏
分享
牛客网
牛客企业服务