给定一个字符串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(); }}