给定字符串s,把他变成相邻两个字母不相同的形状
先变成相邻字符聚在一起的形状,然后重新填装,先填偶数index,再填奇数index
丑陋代码
PS:填装的时候要注意 一定要最先填装出现次数最多的字符
class Solution {
public String reorganizeString(String s) {
int []cnt = new int[26];
int n = s.length();
for(int i=0;i<n;i++)
cnt[s.charAt(i)-'a']++;
char[]ans = new char[n];
for(int i=0;i<26;i++)
if(cnt[i]>=(n+3)/2)
return "";
PriorityQueue<Pair<Character,Integer>> pq=
new PriorityQueue<Pair<Character,Integer>>((a,b) -> b.getValue()-a.getValue());
for(int i=0;i<26;i++){
if(cnt[i]>0){
System.out.println((char)(i+'a'));
System.out.println(cnt[i]);
pq.offer(new Pair((char)(i+'a'),cnt[i]));
}
}
String tem = "";
while(!pq.isEmpty()){
Pair<Character,Integer> cur = pq.poll();
char c = cur.getKey();
int m = cur.getValue();
while(m-->0){
tem+=c;
}
}
int c = 0;
int i=0;
while(i<n){
ans[i] = tem.charAt(c++);
i+=2;
if(i>=n)
if(i%2 == 0)
i = 1;
else break;
}
String a = "";
for(i=0;i<n;i++){
a += ans[i];
}
return a;
// System.out.println(tem);
// int l = 0, r = n-1;
// while(l<=r){
// ans+=tem.charAt(l);
// l++;
// if(l>r)
// return ans;
// ans+=tem.charAt(r);
// r--;
// }
// return ans;
}
}