题解:CF2121B Above the Clouds

· · 题解

题意

给你一个由小写英文字母组成的长度为 n 的字符串 s,让你判断是否有三个非空的字符串 abc,满足:

思路

明显当 b 的长度为 1b 最有可能成为 a+c 的字串。

那么我们可以开一个桶 t 来记录 s 中所有字符出现的次数,然后从 1 枚举到 n-2,判断有没有字符出现的次数大于 1 即可。

代码

#include<iostream>
using namespace std;
int T,n,t[30];
string s;
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    cin>>T;
    while(T--){
        bool f=1;
        cin>>n>>s;
        for(int i=0;i<n;i++) t[s[i]-'a']++;//统计
        for(int i=1;i<n-1;i++) if(t[s[i]-'a']>1){cout<<"Yes\n",f=0;break;}
        if(f) cout<<"No\n";
        for(int i=0;i<30;i++) t[i]=0;//多测不清空,爆零两行泪
    }
}