classSolution{public:stringrearrangeString(strings,intk){constintn=s.length();stringans;vector<int>count(128);vector<int>valid(128);// valid[i] := the leftmost index char i can appearfor(constcharc:s)++count[c];for(inti=0;i<n;++i){constcharc=getBestLetter(count,valid,i);if(c=='*')return"";ans+=c;--count[c];valid[c]=i+k;}returnans;}// Returns the letter that has most count and also validprivate:chargetBestLetter(constvector<int>&count,constvector<int>&valid,intindex){intmaxCount=-1;charbestLetter='*';for(charc='a';c<='z';++c)if(count[c]>0&&count[c]>maxCount&&index>=valid[c]){bestLetter=c;maxCount=count[c];}returnbestLetter;}};
classSolution{publicStringrearrangeString(Strings,intk){finalintn=s.length();StringBuildersb=newStringBuilder();int[]count=newint[128];int[]valid=newint[128];// valid[i] := the leftmost index char i can appearfor(finalcharc:s.toCharArray())++count[c];for(inti=0;i<n;++i){finalcharc=getBestLetter(count,valid,i);if(c=='*')return"";sb.append(c);--count[c];valid[c]=i+k;}returnsb.toString();}// Returns the letter that has most count and also validprivatechargetBestLetter(int[]count,int[]valid,intindex){intmaxCount=-1;charbestLetter='*';for(charc='a';c<='z';++c)if(count[c]>0&&count[c]>maxCount&&index>=valid[c]){bestLetter=c;maxCount=count[c];}returnbestLetter;}}
classSolution:defrearrangeString(self,s:str,k:int)->str:n=len(s)ans=[]count=Counter(s)valid=Counter()# valid[i] := the leftmost index i can appear# Returns the letter that has most count and also validdefgetBestLetter(index:int)->chr:maxCount=-1bestLetter='*'forcinstring.ascii_lowercase:ifcount[c]>0andcount[c]>maxCountandindex>=valid[c]:bestLetter=cmaxCount=count[c]returnbestLetterforiinrange(n):c=getBestLetter(i)ifc=='*':return''ans.append(c)count[c]-=1valid[c]=i+kreturn''.join(ans)