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,即为最终结果。