考察的知识点:字符串、滑动窗口;

解答方法分析:

  1. 定义变量n,表示字符串s的长度;maxLength用来记录最长连续字符的长度;left表示窗口的左边界;
  2. 创建一个unordered_set集合taskSet,用于存储当前窗口内出现的字符;
  3. 进入循环,循环条件是right小于字符串s的长度;
  4. 在循环中,获取当前字符ch = s[right];
  5. 判断字符ch是否在taskSet中,如果不在,表示该字符是新出现的字符,需要将其加入taskSet,并更新maxLength;
  6. 如果字符ch已经在taskSet中,表示该字符在当前窗口内已经出现过,需要移动窗口左边界left;
  7. 移动左边界的方式是通过while循环,判断窗口内的字符是否等于ch,如果不等于ch,则从taskSet中删除该字符,并将左边界left右移一位;
  8. 最后返回maxLength,即最长连续字符的长度。

所用编程语言:C++;

完整编程代码:↓

class Solution {
  public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param s string字符串
     * @return int整型
     */
    int lengthOfLongestContinuousTasks(string s) {
        int n = s.length();
        int maxLength = 0;
        int left = 0;
        unordered_set<char> taskSet;
        for (int right = 0; right < n; ++right) {
            char ch = s[right];
            if (taskSet.find(ch) == taskSet.end()) {
                taskSet.insert(ch);
                maxLength = max(maxLength, right - left + 1);
            } else {
                while (s[left] != ch) {
                    taskSet.erase(s[left]);
                    left++;
                }
                left++;
            }
        }
        return maxLength;
    }
};