package Leetcode;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
/**
* 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
*/
public class reOrganize {
public static void main(String[] args) {
String S = "sfffp";
String result = reorganizeString(S);
int x = 0;
}
public static String reorganizeString(String S) {
if (S == null || S.length() == 0) {
return "";
}
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < S.length(); i++) {
if (map.containsKey(S.charAt(i))) {
map.put(S.charAt(i), map.get(S.charAt(i))+1);
} else {
map.put(S.charAt(i), 1);
}
}
List<Entry<Character, Integer>> list = new ArrayList<Entry<Character, Integer>>(map.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Character, Integer>>() {
@Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
if(o1.getValue()>o2.getValue()){
return -1;
}else if(o1.getValue()>o2.getValue()){
return 1;
}else{
return 0;
}
}
});
int x=list.get(0).getValue();
int sum=0;
for(int i=1;i<list.size();i++){
sum=sum+list.get(i).getValue();
}
if(sum+1<x){
return "";
}
char []result=new char[S.length()];
//新字符串构建方法:首先把最长的字母放到偶数位置上,
//接着用其他字符填充剩余的偶数位置
//超过字符串长度开始填充奇数位置
int j=0;
for(int i=0;i<x;i++){
result[j]=list.get(0).getKey();
j=j+2;
}
for(int i=1;i<list.size();i++){
int l=list.get(i).getValue();
char c=list.get(i).getKey();
for(int k=0;k<l;k++){
if(j>=S.length()){
j=1;
}
result[j]=c;
j=j+2;
}
}
return String.valueOf(result);
}
}