• Leetcode 5195. 最长快乐字符串(贪心)


    题目描述:

      如果字符串中不含有任何 'aaa','bbb' 或 'ccc' 这样的字符串作为子串,那么该字符串就是一个「快乐字符串」。

    • 给你三个整数 a,b ,c,请你返回 任意一个 满足下列全部条件的字符串 s:
    • s 是一个尽可能长的快乐字符串。
    • s 中 最多 有a 个字母 'a'、b 个字母 'b'、c 个字母 'c' 。
    • s 中只含有 'a'、'b' 、'c' 三种字母。

      如果不存在这样的字符串 s ,请返回一个空字符串 ""

    题解:

      每次找出a,b,c三个字符数量最多、次多的两个字符(把字母和出现的次数放在一个pair里面,之后排序就好了),从最多的字符里面取出两个、次多的字符取出一个加入字符串ans,重复上述操作。有几种情况要注意一下:

      1. 当次多的字符数为0的时候,最多的字符至多选择两个。

      2. 在加入出现最多的两个字符的时候,需要判断一下ans的末尾的字符时候和当前要加入的字符一致。一致的话就先把出现次数最少或次少的字符选一个加入字符串ans在执行加入操作。

    AC代码:

      

    class Solution {
    public:
        string longestDiverseString(int a, int b, int c) {
            if((a == 0 && b == 0) || (b == 0 && c == 0) || (c==0 && a == 0)) return "";
            
            string ans ="";
            vector<pair<int,char>> vec;
            vec.push_back(make_pair(a,'a'));
            vec.push_back(make_pair(b,'b'));
            vec.push_back(make_pair(c,'c'));
            while(1)
            {
                sort(vec.begin(),vec.end());
                int mn = vec[0].first;
                int mid = vec[1].first;
                int mx = vec[2].first;
             
                if(mid == 0)
                {
                    for(int i=0;i<min(2,mx);i++) ans+=vec[2].second;
                    break;
                }
    
                if(mx == 1)
                {
                    ans+=vec[2].second;
                    ans+=vec[1].second;
                    if(mn != 0) ans += vec[0].second;
                    break;
                }
                cout << mn << " " << mid <<" " <<mx <<endl;
                if(ans.size()!=0 && ans[ans.size()-1] == vec[2].second)
                {
                    if(mn != 0)
                    {
                        ans+=vec[0].second;
                        vec[0].first--;
                    }
                    else
                    {
                        ans+=vec[1].second;
                        vec[1].first--;
                    }
                    continue;
                }
                
                
              
                    ans+=vec[2].second;
                    ans+=vec[2].second;
                    ans+=vec[1].second;
                
                vec[2].first -= 2;
                vec[1].first -= 1;
            }
            return ans;
    
        }
    };
  • 相关阅读:
    禁用Firefox浏览器中的CSS、Flash及Image加载
    禁用Chrome浏览器中的Image加载
    启用Firefox的同时打开Firebug
    禁用IE的保护模式
    禁用Chrome浏览器的PDF和Flash插件
    屏蔽Chrome的--ignore-certificate-errors提示及禁用扩展插件并实现窗口最大化
    技术文档
    操作工具
    接口自动化
    nmon
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12640568.html
Copyright © 2020-2023  润新知