题解:P12171 [蓝桥杯 2025 省 Python B] 最长字符串

· · 题解

长度大于一的优美字符串都得从长度更小的推过来,所以把所有字符串按长度从小到大排序。使用一个集合 s 来存放已知的优美字符串。

接着一个一个遍历:

code

#include<bits/stdc++.h>
using namespace std;
set<string> a;
string s[500010];
bool cmp(string x,string y){
    return x.size()<y.size();
}
int main(){
    string anss;
    int cnt=0;
    int ans=-1;
    while(cin>>s[cnt]){
        if(!s[cnt].empty()){
            cnt++;
        }
    }
    sort(s,s+cnt,cmp);
    for(int i=0;i<cnt;i++){
        if(s[i].empty()){
            continue;
        }
        if(s[i].size()==1){
            a.insert(s[i]);
            continue;
        }
        string s1=s[i];
        s1.erase(s1.size()-1,1);
        sort(s1.begin(),s1.end());
        if(a.find(s1)!=a.end()){
            if(ans<(int)s[i].size()){
                ans=s[i].size();
                anss=s[i];
            }
            if(ans==(int)s[i].size()){
                if(s[i]<anss){
                    anss=s[i];
                }
            }
            sort(s[i].begin(),s[i].end());
            a.insert(s[i]);
        }
    }
    cout<<anss;
}