思路:先求出当字符串重构后合理情况下,a最多能有多少个:
因此先求出给定的字符串s的长度,然后遍历字符串找到数量最多的那个'a',先比较'a'的数量是否为字符串长度的一半,如果是,说明这个字符串可以合理地重构,初始化一个数组,把'a'放在偶数下标的位置,然后依次填满数组即可。
public String reorganizeString(String s) {
char[] array=s.toCharArray();
int[] alphaCount=new int[26];
int len=s.length();
for(int i=0;i<len;i++){
alphaCount[array[i]-'a']++;
}
int max=0;
int alphabet=0;
int threshold=(len+1)>>1;
for(int i=0;i<26;i++){
if(alphaCount[i]>max){
max=alphaCount[i];
alphabet=i;
if(max>threshold) return "";
}
}
char[] res=new char[len];
int index=0;
while(alphaCount[alphabet]-->0){
res[index]=(char)(alphabet+'a');
index+=2;
}
for(int i=0;i<26;i++){
while(alphaCount[i]-->0){
if(index>=len) index=1;
res[index]=(char)(i+'a');
index+=2;
}
}
return new String(res);
}