力扣767.重构字符串
-
将每个字母的出现次数存在哈希表中
- 按出现次数排序
- 如果最大的次数 > 其他次数之和 + 1,说明最终一定不会有合法答案
- 从最大次数开始 先放偶数下标 再放奇数下标
-
class Solution { public: string reorganizeString(string s) { int n = s.size(); unordered_map<char,int> cnt; for(char c:s) cnt[c] ++; vector<pair<char,int>> a(cnt.begin(),cnt.end()); //语法 自定义按次数排序 ranges::sort(a,[](const auto&p,const auto&q) { return p.second > q.second; }); int m = a[0].second; if(m > n - m + 1) return ""; string res(n,0); int i = 0; for(auto [ch,cur] : a) { while(cur -- ) { res[i] = ch; i += 2; if(i >= n) i = 1; } } return res; } };