传送门
题目描述
给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
若可行,输出任意可行的结果。若不可行,返回空字符串。
示例 1:
输入: S = “aab”
输出: “aba”
示例 2:
输入: S = “aaab”
输出: “”
注意:
S 只包含小写字母并且长度在[1, 500]区间内。
class Solution {
public:
string reorganizeString(string S) {
vector<int>nums(26,0);
int n = S.size();
for(int i=0; i<n; i++)
nums[S[i]-'a']++;
int maxalp = 0;
int maxnum = 0;
for(int i=0; i<26; i++)
{
if(maxnum < nums[i])
{
maxnum = nums[i];
maxalp = i;
}
}
if(maxnum > (n+1)>>1)
return "";
string result(maxnum,maxalp+'a');
nums[maxalp] = 0;
int pos1 = 0,pos2 = 1;
while(pos1 < 26)
{
while(nums[pos1]>0)
{
result.insert(pos2,1,pos1+'a');
pos2 = (pos2+2)%result.size();
nums[pos1]--;
}
pos1++;
}
return result;
}
};