|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
题目描述:
- 给定一个字符串S,检查是否能重新排布其中的字母,使得两相邻的字符不同。
- 若可行,输出任意可行的结果。若不可行,返回空字符串。
- 示例 1:
- 输入: S = "aab"
- 输出: "aba"
- 示例 2:
- 输入: S = "aaab"
- 输出: ""
- 注意:
- S 只包含小写字母并且长度在[1, 500]区间内。
复制代码
- class Solution {
- public:
- string reorganizeString(string S) {
- //1.选取出现最大频次的字符串作为基准字符串
- vector<int> store(26);
- for(auto cha : S)store[cha - 'a']++;
- int len = S.size();
- int max_num = *max_element(store.begin(), store.end());
- int max_index = max_element(store.begin(), store.end()) - store.begin();
- //最大字符的频次超过半数的就直接返回“”表示不能实现
- if(len % 2 == 0 && max_num > len / 2)return "";
- else if(len % 2 != 0 && max_num > (len + 1)/2)return "";
- string res(max_num, max_index + 'a');
- int temp1 = 0;//表示26个字母中的第几个字母
- int temp2 = 1;//表示在temp2位置前插入(位置从0开始)
- while(temp1 < 26){
- if(temp1 == max_index){
- temp1 ++;
- continue;
- }
- while(store[temp1] != 0){
- store[temp1]--;
- res.insert(temp2, 1, 'a' + temp1);
- temp2 = (temp2 + 2) % res.size();//隔一个字符一插入
- }
- temp1++;
- }
- return res;
- }
- };
复制代码
参考链接:https://leetcode-cn.com/problems ... -bi-ji-767-by-ae2a/ |
|