前缀和,判定条件转化一下,就可以用map了,注意初始化
1 #include<bits/stdc++.h> 2 using namespace std; 3 int main() 4 { 5 int n; 6 cin>>n; 7 string s; 8 cin>>s; 9 int J=0,O=0,I=0; 10 map<pair<int,int>,int>mapp; 11 mapp[make_pair(0,0)]=-1; 12 int ans=0; 13 for(int i=0;i<n;i++){ 14 if(s[i]==‘J‘) J++; 15 if(s[i]==‘O‘) O++; 16 if(s[i]==‘I‘) I++; 17 if(mapp.find(make_pair(J-O,O-I))==mapp.end()){ 18 mapp[make_pair(J-O,O-I)]=i; 19 } 20 else{ 21 ans=max(ans,i-mapp[make_pair(J-O,O-I)]); 22 } 23 } 24 cout<<ans<<endl; 25 return 0; 26 }