小b有一个字符串S,现在她希望重排列S,使得S中相邻字符不同。
请你判断小b是否可能成功。
样例解释:将"aab"重排为"aba"即可。
Ã输入一个只包含小写字母的字符串S,其长度n满足1≤n≤500
如果可能,输出"Possible"; 否则,输出"Impossible"。
aab
Possible
思路:统计每一个字母出现的次数,如果la%2==0,出现最多次数必须《=la/2;
如果la%2==1,必须《=la/2+1;
#include<iostream> using namespace std; int x[129]; int main(){ string a; cin>>a; int la=a.size(); for(int i=0;i<la;i++) x[a[i]]++; int maxx=0; for(int i=1;i<=128;i++) if(maxx<x[i]) maxx=x[i]; //cout<<maxx<<endl; if(la%2==0&&maxx>la/2){ cout<<"Impossible"<<endl; return 0; } if(la%2==1&&maxx>la/2+1){ cout<<"Impossible"<<endl; return 0; } cout<<"Possible"<<endl; return 0; }
原文:https://www.cnblogs.com/yfr2zaz/p/10726262.html