https://www.cnblogs.com/grandyang/p/7098764.html
将个数出现最多的那个字符作为分隔的标准,一定是最小的。所以这个时候只需要计算还需要添加多少个idel就能找到整个的个数。
方法是:先计算个数最多的字符,并且判断有没有跟他个数相同的,如果这个字符出现的次数是3次,那其实只需要中间有2个部分进行填充。同时注意这种有重复个数的字符,这些个数重复的字符也只有n-1个在这2个部分。然后就算剩下的有多少字符,并且需要多少个字符,再根据这个进行补充。
class Solution { public: int leastInterval(vector<char>& tasks, int n) { int length = tasks.size(); vector<int> charecter(26,0); for(char task : tasks) charecter[task - 'A']++; int max_num = 0,max_number = 0; for(int i = 0;i < 26;i++){ if(charecter[i] > max_num){ max_num = charecter[i]; max_number = 1; } else if(charecter[i] == max_num) max_number++; } int blank = (n - max_number + 1) * (max_num - 1); int left = tasks.size() - max_num * max_number; int idle_num = blank > left ? blank - left : 0; return tasks.size() + idle_num; } };