题解:CF1971B Different String
题目
看到题目,就觉得很简单
明显的字符串题,但我们还是需要分析具体的做法哟~!
首先要判断能不能变成其他的字符串,遍历字符串,看看有多少个不同的字母,大于
如果输出NO,就是每个字母都一样,没必要继续判断,所以continue;
如果有不同的字母,就把它变成另一个字符串,怎么变呢?
如果枚举判断的话,复杂度是
推一个
把字符串排序,如果与原字符串不同就输出,相同就倒序后输出
话不多说,上代码!
#include<bits/stdc++.h>
using namespace std;
int cmp(char a,char b){
return a>b;
}
int main(){
int t;
cin>>t;
while(t--){
string a;
cin>>a;
int p[30]={0};//保存每个字母出现的数量
for(int x=0;x<a.size();x++){
p[a[x]-'a']++;
}
int cnt=0;//保存共有多少个不同的字母
for(int x=0;x<26;x++){
if(p[x]!=0)cnt++;
}
if(cnt>=2)cout<<"YES"<<endl;//如果有不同的字母就输出YES
else{//否则输出NO
cout<<"NO"<<endl;
continue;
}
string a1=a;//拷贝a
sort(a1.begin(),a1.end());//排序
if(a1==a){
reverse(a1.begin(),a1.end());//倒序
cout<<a1<<endl;
}else cout<<a1<<endl;
}
return 0;
}
第一次写题解,求通过!