r 将暂时固定住。如果 r 已经到头了,r 将不会再变化。否则,由于只会执行 freq[s[l++]] --;,直到某个时刻,freq[s[r+1]] == 0 了,r 就可以继续右移了。
我强烈建议你是用一个简单的测试用例,使用这个程序进行单步跟踪,去看在每次循环中,l 和 r 都是怎样变化的,为什么会产生这样的变化。这是学习算法,乃至是学习编程最好的方式,实际去看程序是怎样运行的,和你脑子里想象的运行方式是否一致。如果不一致,自己哪里想错了。只有通过多次这样的训练,才能慢慢更加深刻地理解程序的运行方式。进步就在这个过程中哦。