358. Rearrange String k Distance Apart
class Solution {
public:
string rearrangeString(string str, int k) {
vector<int> count(26), valid(26);
for (const auto c : str) {
++count[c - 'a'];
}
const auto next = [&](int index) {
int mx = 0, res = -1;
for (int i = 0; i < 26; ++i) {
if (count[i] > mx && valid[i] <= index) {
res = i;
mx = count[i];
}
}
return (char) (res + 'a');
};
string res;
for (int i = 0; i < str.length(); ++i) {
auto nc = next(i);
res += nc;
--count[nc - 'a'];
valid[nc - 'a'] += i + k - 1;
}
return res;
}
};
Last updated