1.题目链接:
2.题目描述:
给定一个字符串 s ,检查是否能重新排布其中的字母,使得两相邻的字符不同。 返回 s 的任意可能的重新排列。若不可行,返回空字符串 "" 。
示例 1:
输入: s = "aab"
输出: "aba"
示例 2:
输入: s = "aaab"
输出: ""
提示:
| ◦ | 1 <= s.length <= 500 |
| ◦ | s 只包含小写字母 |
3. 解法(贪心):
贪心策略:
与上面的一道题解法一致~
Java算法代码:
class Solution {
public String reorganizeString(String s) {
int[] hash = new int[26];
char maxChar = ' ';
int maxCount = 0;
for(int i = 0; i < s.length(); i++){
char ch = s.charAt(i);
if(maxCount < ++hash[ch - 'a']){
maxChar = ch;
maxCount = hash[ch - 'a'];
}
}
int n = s.length();
//先判断
if(maxCount > (n + 1) / 2) return "";
char[] ret = new char[n];
int index = 0;
//先处理次数最多的字符
for(int i = 0; i < maxCount; i++){
ret[index] = maxChar;
index += 2;
}
hash[maxChar - 'a'] = 0;
for(int i = 0; i < 26; i++){
for(int j = 0; j < hash[i]; j++){
if(index >= n) index = 1;
ret[index] = (char)(i + 'a');
index += 2;
}
}
return new String(ret);
}
}
运行结果:

贪心策略:

205

被折叠的 条评论
为什么被折叠?



