题目:https://leetcode-cn.com/problems/reorganize-string
给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
示例 1:
输入: S = "aab"
输出: "aba"
示例 2:
输入: S = "aaab"
输出: ""
注意:
S 只包含小写字母并且长度在[1, 500]区间内。
实现源码:GitHub所有练习题代码
public class Solution {
public string ReorganizeString(string oldStr) {
string reorganizeStr = string.Empty;
if (oldStr == null || oldStr.Length == 0)
{
return "";
}
int[] charCount = new int[26];
foreach (char item in oldStr.ToCharArray())
{
charCount[item - 'a']++;
}
int maxCharCount = 0;
char maxCountLetter='0';
for (int i = 0; i < charCount.Length; i++)
{
if (maxCharCount < charCount[i])
{
maxCharCount = charCount[i];
maxCountLetter = (char)('a' + i);
}
}
if (maxCharCount > (oldStr.Length + 1) / 2)
{
return "";
}
char[] res = new char[oldStr.Length];
int index = insert(charCount, res, 0, maxCountLetter);
for (int i = 0; i < 26; i++)
{
index = insert(charCount, res, index, (char)('a' + i));
}
reorganizeStr = new string(res);
return reorganizeStr;
}
private int insert(int[] oldCount,char[] res,int index, char letter)
{
int i = letter - 'a';
while (oldCount[i] > 0)
{
if (index >= res.Length)
{
index = 1;
}
res[index] = letter;
oldCount[i]--;
index += 2;
}
return index;
}
}