2 条题解
-
0
Guest
-
0
滑动窗口,建左右两个指针、一个用于判断是否重复的
map
。遍历左指针,若不为,则把最左边的字符
s[l]
对应的值标记为。接下来右指针开始向右移,有重复的字符
Hash[s[r+1]]==1
或者越界停止,每次把最右边的字符标记为。然后就是一个符合条件的子串长度,记录下来打擂台即可。
#include<bits/stdc++.h> using namespace std; string s; map<char,bool> Hash; int ans=1; int main(){ cin>>s; int n=s.size(); int l=0,r=-1; for(l;l<n;l++){ if(l>0){ Hash[s[l-1]]=0; } while(r+1<n&&Hash[s[r+1]]==0){ r++; Hash[s[r]]=1; } ans=max(ans,r-l+1); } cout<<ans; }
信息
- ID
- 911
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 8
- 标签
- (无)
- 递交数
- 32
- 已通过
- 6
- 上传者