给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
示例 1:
输入: S = “aab”
输出: “aba”
示例 2:
输入: S = “aaab”
输出: “”
注意:
S 只包含小写字母并且长度在[1, 500]区间内。
class Solution {
public:
string reorganizeString(string S) {
if(S.size()<2)
return "";
int l=S.size();
int num[26]={0};
for(int i=0;i<l;i++){
num[S[i]-'a']++;
}
int max=0;
for(int i=0;i<26;i++){
if(num[i]>max){
max=num[i];
}
}
if(l%2==0){
if(max>l/2)
return "";}
else{
if(max>l/2+1)
return "";
}
string s;
while(1){
int maxx=0;int la;
for(int i=0;i<26;i++){
if(maxx<num[i]){
maxx=num[i];
la=i;
}
}
if(maxx==0)
break;
s+=(la+'a');
num[la]--;
int max2=0;
int lb;
for(int i=0;i<26;i++){
if(i==la)
continue;;
if(max2<num[i]){
max2=num[i];
lb=i;
}
}
if(max2==0)
continue;
s+=(lb+'a');
num[lb]--;
}
return s;
}
};
版权声明:本文为weixin_44184902原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。