class Solution {
public String longestDiverseString(int a, int b, int c) {
StringBuilder res=new StringBuilder();
Pair arr[]={new Pair(a,'a'),new Pair(b,'b'),new Pair(c,'c')};
while(true){
//对arr根据a,b,c的值排序,此时arr是按照freq值从大到小排序后的arr。
Arrays.sort(arr,(p1,p2)->p2.freq-p1.freq);
//hasNext默认为没有,如果此次循环中发现有字符可加入,就将hasNext改成true,如果没有字符可加入就不改
boolean hasNext=false;
for(Pair pair:arr){
//如果最大的freq已经为0,跳出for循环,再次进行while循环,重新排序arr。
//break用于完全结束一个循环,跳出循环体执行循环后面的语句。
if(pair.freq<=0) break;
int m=res.length();
//如果前面已经有连续两个和当前字符相同的字符了,就不执行下面语句,直接遍历下一个pair
//continue是跳过当次循环中剩下的语句,执行下一次循环。
if(m>=2&&res.charAt(m-2)==pair.ch&&res.charAt(m-1)==pair.ch) continue;
hasNext=true;
res.append(pair.ch);
pair.freq--;
break;
}
//此次while循环重新排序后for循环中仍然没有可加入的字符,就跳出while循环。
if(!hasNext) break;
}
return res.toString();
}
}
class Pair{
int freq;
char ch;
public Pair(int freq,char ch){
this.freq=freq;
this.ch=ch;
}
}
22.2.7-最长快乐字符串
最新推荐文章于 2024-07-26 00:37:11 发布