zoukankan      html  css  js  c++  java
  • [编程题]美团骑手包裹区间分组

    今天接到了美团的笔试邀请,毕竟是人生中的第一次,感觉挺开心的,但是开心的同时伴随而来的是担心,没什么经验,不知道笔试这一关能不能通过。编程提到还好,就是那些问答题我真的不知道该怎么回答,感觉一脸懵。趁着这两天时间,好好地补一下吧。不知道为什么突然感觉自己好像什么都不会。是不是自己把太多的精力放在了写代码上面?

    2110年美团外卖火星第3000号配送站点有26名骑手,分别以大写字母A-Z命名,因此可以称呼这些骑手为黄家骑士特工A,黄家骑士特工B…黄家骑士特工Z,某美团黑珍珠餐厅的外卖流水线上会顺序产出一组包裹,美团配送调度引擎已经将包裹分配到骑手,并在包裹上粘贴好骑手名称,如RETTEBTAE代表一组流水线包裹共9个,同时分配给了名字为A B E R T的5名骑手。请在不打乱流水线产出顺序的情况下,把这组包裹划分为尽可能多的片段,同一个骑手只会出现在其中的一个片段,返回一个表示每个包裹片段的长度的列表。


    输入描述:

    输入数据只有一行,为一个字符串(不包含引号),长度不超过1000,只包含大写字母'A'到'Z',字符之间无空格。


    输出描述:

    输出每个分割成片段的包裹组的长度,每个长度之间通过空格隔开


    输入例子1:
    MPMPCPMCMDEFEGDEHINHKLIN

    输出例子1:
    9 7 8

    例子说明1:

    划分结果为MPMPCPMCM,DEFEGDE,HINHKLIN。

    每个骑手最多出现在一个片段中。

    像MPMPCPMCMDEFEGDE,HINHKLIN的划分是错误的,因为划分的片段数较少。

    思路:

    先找包含全部第一个字母子串,若子串中其他的字母也都包含在这个子串中,则这就是一个满足要求的最短片段,否则再向后遍历使其满足要求。

    Code:

    #include<iostream>
    #include<string>
    #include<map>
    #include<vector>
    #include<set>
    
    using namespace std;
    
    int main() {
        string str;
        cin >> str;
        map<char, int> mp;
        for (int i = 0; i < str.length(); ++i) {
            mp[str[i]]++;
        }
        int start = 0, cur = 0, end;
        vector<int> ans;
        for (int i = 0; i < str.length(); ++i) {
            if (mp[str[cur]] == 0) {
                bool flag = false;
                for (int j = 1; j < i; ++j) {
                    if (mp[str[j]] != 0) {
                        cur = j;
                        flag = true;
                        break;
                    }
                }
                if (!flag) {
                    ans.push_back(i-start);
                    start = i;
                    cur = start;
                }
            }
            mp[str[i]]--;
        }
        ans.push_back(str.length()-start);
        if (!ans.empty()) {
            cout << ans[0];
        }
        for (int i = 1; i < ans.size(); ++i)
            cout << " " << ans[i];
    
        return 0;
    }
    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    python之enumerate枚举 第二篇(六):enumerate枚举
    git使用学习
    Git安装
    eclipse对项目整理分类
    Java基础学习总结——Java对象的序列化和反序列化
    工作代码实例
    substring与substr
    第一个jave程序-helloworld
    UI自动化
    sikuli实例
  • 原文地址:https://www.cnblogs.com/h-hkai/p/12657279.html
Copyright © 2011-2022 走看看