给定一个字符串S
,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
示例 1:
输入: S = "aab"
输出: "aba"
示例 2:
输入: S = "aaab"
输出: ""
注意:
S
只包含小写字母并且长度在[1, 500]
区间内。
class Solution {
public String reorganizeString(String S) {
if (S.length() == 1)
return S;
int[] nums = new int[26];
char[] chs = S.toCharArray();
for (char c : chs)
nums[c - 'a']++;
StringBuilder sb = new StringBuilder();
char temp = 'A';
while (sb.length() < chs.length) {
int max = 0;
for (int i = 0; i < 26; i++) {
if (i == temp - 'a')
continue;
if (nums[i] > 0)
max = nums[i] > nums[max] || max == temp - 'a' ? i : max;
}
if (temp - 'a' == max || nums[max] == 0)
return "";
nums[max]--;
sb.append((char)(max + 'a'));
temp = (char)(max + 'a');
}
return sb.toString();
}
}