用贪心,选择符合条件中的数量最多的字符。
先使用多出来的字符,直到三个字符的数量相同,abc循环。
struct Node{
int num;
char c;
};
bool cmp(Node a,Node b){
return a.num>b.num;
}
Node nodes[3];
class Solution {
public:
string longestDiverseString(int a, int b, int c) {
string ans;
nodes[0].num=a;
nodes[0].c='a';
nodes[1].num=b;
nodes[1].c='b';
nodes[2].num=c;
nodes[2].c='c';
while(1){
sort(nodes,nodes+3,cmp);
int n=ans.size();
if(nodes[0].num==0)
break;
char c=nodes[0].c;
if(!(n-2>=0 && ans[n-2]==c && n-1>=0 && ans[n-1]==c)){
ans+=c;
nodes[0].num--;
}
else{
if(nodes[1].num==0)
break;
ans+=nodes[1].c;
nodes[1].num--;
}
}
return ans;
}
};