目录
1.题目解析
题目来源
测试用例
2.算法原理
1.入窗口
2.出窗口
3.更新结果
3.实战代码
代码解析
1.题目解析
题目来源
包含不超过两种字符的最长子串——牛客网
测试用例
2.算法原理
1.入窗口
这里的窗口限制条件为:窗口内不能超过两种字符,所以使用一个变量count来限制字符种类,当count不大于2就向窗口内添加字符
2.出窗口
当count大于2就需要出窗口,从最左段开始出,当出窗口时窗口内减少一种字符就将count--
3.更新结果
当准备出窗口时就需要更新不超过两种字符穿的最长子串的长度,此时窗口的长度为right - left + 1,与变量ret取较大值即可,更新后的结果存在ret内
3.实战代码
#include <iostream>
using namespace std;int main()
{string s;cin>>s;int n = s.size();int count = 0;int ret = -1;int hash[26] = {0};int left = 0,right = 0;while(right < n){if(hash[s[right] - 'a']++ == 0){count++;}while(count > 2){if(hash[s[left++] - 'a']-- == 1){count--;}}ret = max(ret,right - left + 1);right++;}cout<<ret<<endl;return 0;
}
代码解析