双指针做法 创建两个指针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']; } ...