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

京公网安备 11010502036488号