目录
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;
}
代码解析