讨论/题目交流/🏆 第 183 场力扣周赛/
🏆 第 183 场力扣周赛

欢迎小伙伴们在这里交流分享你的参赛心得以及体验。【前往竞赛

image.png

4 分 - 非递增顺序的最小子序列
4 分 - 将二进制表示减到 1 的步骤数
6 分 - 最长快乐字符串
7 分 - 石子游戏 III

展开讨论
力扣 (LeetCode)发起于 2020-04-05
T3.贪心策略,每次选取剩余数量最多的同时保证连续三个字符不会相同的字符加入道字符串的末尾即可。
class Solution {
public:
    static char biggest(map<char,int>num,char x){
        char maxx;
        if(x =='o'){
            //找三者的最大值
            if(num['a']>num['b']){
                maxx='a';
            }else maxx='b';
            if(num['c']>num[maxx])maxx='c';
        }else if(x=='a'){
            maxx=num['b']>num['c']?'b':'c';
        }else if(x=='b'){
            maxx=num['a']>num['c']?'a':'c';
        }else if(x=='c'){
            maxx=num['a']>num['b']?'a':'b';
        }
        return maxx;
    }
    string longestDiverseString(int a, int b, int c) {
        map<char,int>num;
        num['a']=a;
        num['b']=b;
        num['c']=c;
        string s;
        char big;
            big=biggest(num,'o');
        num[big]=num[big]-1;
        s+=big;
        if(a+b+c==1)return s;
        else{
        big=biggest(num,'o');
        num[big]=num[big]-1;
        s+=big;
            while(num['a']!=0||num['b']!=0||num['c']!=0){
                if(s[s.length()-1]==s[s.length()-2]){
                    big = biggest(num,s[s.length()-1]);
                    if(num[big]<=0)break;
                    s+=big;
                    num[big]=num[big]-1;
                }else{
                    big = biggest(num,'o');
                    s+=big;
                    num[big]=num[big]-1;
                }
            }
            return s;
        }

    }
};
1
展开全部 22 讨论