import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return int整型
     */
    public int lengthOfLongestContinuousTasks (String s) {
        // write code here
        int maxLength = 0;
        int left = 0;
        int right = 0;
        int[] count = new int[128]; // 用于记录每个字符出现的次数

        while (right < s.length()) {
            char c = s.charAt(right);
            count[c]++;

            // 如果当前字符重复了,则移动左边界
            while (count[c] > 1) {
                char leftChar = s.charAt(left);
                count[leftChar]--;
                left++;
            }

            // 计算当前窗口的长度,并更新最大长度
            int windowLength = right - left + 1;
            maxLength = Math.max(maxLength, windowLength);

            right++;
        }

        return maxLength;
    }
}

Java代码

该题考察的知识点是字符串处理和滑动窗口算法。

使用了一个滑动窗口来维护一个不重复的任务编号序列。窗口的左边界表示当前连续任务序列的起始位置,右边界表示当前遍历到的任务。

数组 count 来记录每个字符出现的次数,以便判断是否有重复字符。遍历字符串时,先将当前字符加入窗口,并将对应的计数加1。如果当前字符已经出现过了(即计数大于1),则说明存在重复字符,需要移动窗口的左边界。

移动左边界的操作是将窗口内第一个字符从窗口中去除,并将其计数减1。然后,判断新的左边界字符是否重复,直到窗口内没有重复字符为止。

在每次移动窗口时,都会计算当前窗口的长度,并更新最大长度 maxLength。

最终返回的是最大长度 maxLength,即为最终结果。