当前位置: 首页 > news >正文

字符最大间隔排列

B-完美串_牛客挑战赛79

思路:

代码:

    string s;
    cin>>s;
    array<int,26> cnt={0};
    for(auto c: s){
        ++cnt[c-'a'];
    }
    int n=s.size();
    auto check=[&](int x){
        auto c=cnt;
        array<int,26> lst;
        lst.fill(-x);
        for(int i=0; i<n; i++){
            int id=-1;
            for(int j=0; j<26; j++){
                if(c[j] && i-lst[j]>=x &&( id==-1 || c[j]>c[id])){
                    id=j;
                }
            }
            if(id==-1){
                return false;
            }
            --c[id], lst[id]=i;
        }
        return true;
    };
    for(int x= min(n,26); x>=1; x--){
        if(check(x)){
            cout<<x<<'\n';
            array<int,26> lst;
            lst.fill(-x);
            for(int i=0; i<n; i++){
                int id=-1;
                for(int j=0; j<26; j++){
                    if(cnt[j] && i-lst[j]>=x && (id==-1 || cnt[j]>cnt[id])){
                        id=j;
                    }
                }
                --cnt[id], lst[id]=i;
                cout<<char(id+'a');
            }
            cout<<'\n';
            break;
        }
    }

相关文章:

  • C++程序员职业规划
  • MySQL与Redis的缓存一致性问题
  • python-leetcode-删除链表的倒数第 N 个结点
  • 批量将 Excel 文档中的图片提取到文件夹
  • MySQL -- 数据类型
  • Java 枚举
  • SpringBoot自动装配的工作原理
  • python-docx - 读写更新 .docx 文件(Microsoft Word 2007+ )
  • Django系列教程(7)——路由配置URLConf
  • SpringBoot 入门基础
  • OBS推WebRTC流,并添加毫秒级时间显示
  • 【C++11】auto decltype nullptr
  • C++ 函数重载
  • 【Linux篇】进程状态(僵尸进程,孤儿进程),优先级与调度机制
  • BUUCTF逆向刷题笔记(13-?)持续更新
  • 【leetcode hot 100 24】两两交换链表中的节点
  • vulnhub-DC-9 SQL注入、“ssh端口敲门”、hydra爆破
  • 题解:AT_arc093_b [ABC092D] Grid Components
  • Python规则引擎DIY:从零开始构建规则引擎
  • Linux》》Ubuntu22.04下Docker的安装 Docker
  • 国家医保局副局长颜清辉调任人社部副部长
  • 昂立教育:去年减亏1.39亿元,今年以“利润持续增长”为核心目标
  • 北京朝阳涉住宅组团地块126亿元成交
  • 马上评丨发钱奖励结婚,支持婚育就该系统性发力
  • 103岁抗战老兵、抗美援朝老兵、医学专家张道中逝世
  • 广西给出最后期限:6月30日之前主动交代问题可从宽处理