牛客对应题目链接:包含不超过两种字符的最长子串_牛客题霸_牛客网 (nowcoder.com)
一、分析题目
简单的滑动窗口问题。
二、代码
#include <iostream> #include <unordered_map> using namespace std; int main() { string s; cin >> s; int n=s.size(); int res=0; int cnt=0; unordered_map<char, int> hash; int left=0, right=0; while(right<n) { hash[s[right]]++; if(hash[s[right]]==1) //0->1 多了一种字符 cnt++; while(cnt>2) { hash[s[left]]--; if(hash[s[left]]==0) //1->0 少了一种字符 cnt--; left++; } res=max(res, right-left+1); right++; } cout << res << endl; return 0; }
三、反思与改进
思路基本没错,还是 “滑动窗口” 系列问题的练习量不够,导致问题考虑的不周到。