楼上对于代码的问题,我可能懂一点(不保证对,我也挺菜的)。为什么要while (l <= r && s[l] != a) l++;呢?因为此时的change使用的次数已经达到k了,那么下一个数字是要变的数字a。此时需要在这个进行判断,然后如果在这个区间最左端的数字就是a1,那么那么可以无条件缩小区间,反正不会影响change(此时的change就是k),于是乎就有了这句。但是如果区间最左端数字是a的话就不可以(因为change已经等于k了)。而后面的l++; r++;这句则是在change不变的原则下进行的区间平移。因为经过上面的while语句后可以保证区间最左端的数字一定是a,而区间最右端的数字也一定是a。这时,l++(相当于change--),r++(相当于change++),change还是等于k(这应该就是一楼问的问题,change实际上在等于k后一直都是等于k的)。
2

相关推荐

牛客网
牛客企业服务