考察的知识点:字符串、滑动窗口;
解答方法分析:
- 定义变量n,表示字符串s的长度;maxLength用来记录最长连续字符的长度;left表示窗口的左边界;
- 创建一个unordered_set集合taskSet,用于存储当前窗口内出现的字符;
- 进入循环,循环条件是right小于字符串s的长度;
- 在循环中,获取当前字符ch = s[right];
- 判断字符ch是否在taskSet中,如果不在,表示该字符是新出现的字符,需要将其加入taskSet,并更新maxLength;
- 如果字符ch已经在taskSet中,表示该字符在当前窗口内已经出现过,需要移动窗口左边界left;
- 移动左边界的方式是通过while循环,判断窗口内的字符是否等于ch,如果不等于ch,则从taskSet中删除该字符,并将左边界left右移一位;
- 最后返回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; } };