专栏文章
题解:P12171 [蓝桥杯 2025 省 Python B] 最长字符串
P12171题解参与者 1已保存评论 0
文章操作
快速查看文章及其快照的属性,并进行相关操作。
- 当前评论
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @minm7cg8
- 此快照首次捕获于
- 2025/12/02 04:41 3 个月前
- 此快照最后确认于
- 2025/12/02 04:41 3 个月前
长度大于一的优美字符串都得从长度更小的推过来,所以把所有字符串按长度从小到大排序。使用一个集合 来存放已知的优美字符串。
接着一个一个遍历:
- 长度等于一的直接加到 里。
- 长度大于一的,设它的长度为 ,把长度为 的前缀单独拉出来按字典序排序,看集合里有没有和排序完的前缀相等的,如果有它就是。
- 长度大于一的是优美字符串的话,看能不能更新答案,然后,把他整个拉出来按字典序排序,加到 里。
code
CPP#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;
}
相关推荐
评论
共 0 条评论,欢迎与作者交流。
正在加载评论...