题解 | #万万没想到之聪明的编辑#

万万没想到之聪明的编辑

https://www.nowcoder.com/practice/42852fd7045c442192fa89404ab42e92

#include "string"
#include "deque"
#include "vector"
#include "iostream"

using namespace std;
//状态0  相同push   不同push且++
//状态1  相同no   不同push且++
//状态2  相同no   不同push且=0(到状态0)
int main()
{
    //int value[] = {1, 2, 5};
    int nLine;
    string strTemp;
    vector<string> strOutList;
    cin >> nLine;
    while(nLine--)
    {
        char letterOld = ' ';
        int count = 0;
        cin >> strTemp;
        letterOld = strTemp[0];
        string strOut;
        strOut.push_back(strTemp[0]);
        for (int i = 1; i < strTemp.size(); i++)
        {
            switch(count)
            {
                case 0:        //状态0
                    if (letterOld == strTemp[i])
                        count++;
                    strOut.push_back(strTemp[i]);
                    letterOld = strTemp[i];
                    break;
                case 1:        //状态1
                    if (letterOld != strTemp[i])
                    {
                        count++;
                        strOut.push_back(strTemp[i]);
                    }
                    letterOld = strTemp[i];
                    break;
                case 2:        //状态2
                    if (letterOld != strTemp[i])
                    {
                        count = 0;
                        strOut.push_back(strTemp[i]);
                    }
                    letterOld = strTemp[i];
                    break;
            }
        }
        strOutList.push_back(strOut);
    }
    for (int i = 0; i < strOutList.size(); i++)
        cout << strOutList.at(i) << endl;
    strOutList.clear();
    return 0;
}

//暴力解法
#if 0
string findTri(string str)
{
    int num = str.size();
    char old = str[0];
    int count = 1;
    string strout = "";
    strout.push_back(str[0]);
    for (int i = 1; i < num; i++)
    {
        if (old == str[i])
            count++;
        else
            count = 1;
        if (count == 3)
            count = 2;
        else
        {
            strout.push_back(str[i]);
        }
            
        old = str[i];
    }
    return strout;
}

string findDouble(string str)
{
    int num = str.size();
    char old = str[0];
    int count = 1;
    string strout = "";
    strout.push_back(str[0]);
    bool flag = false;
    for (int i = 1; i < num; i++)
    {
        if (old == str[i])
        {
            if (flag)
            {
                i++;
                if (i < num)
                    ;
                else
                    break;
                flag = false;
            }
            else
            {
                strout.push_back(str[i]);
                i++;
                if (i < num)
                    ;
                else
                    break;
                flag = true;
            }
        }
        else
        {
            flag = false;
        }
        strout.push_back(str[i]);
        old = str[i];
    }
    return strout;
}

int main(int argv, char* argc[])
{
    int numLine;
    cin >> numLine;
    
    deque<string> wordList;
    for (int i = 0; i < numLine; i++)
    {
        string wordTemp;
        cin >> wordTemp;
        wordList.push_back(wordTemp);
    }
    //ut << numLine << endl;
    while(!wordList.empty())
    {
        string wordTemp = wordList.at(0);
        string wordTemp1 = findTri(wordTemp);
        string wordTemp2 = findDouble(wordTemp1);
        cout << wordTemp2 << endl;
        wordList.pop_front();
    }
    return 0;
}
#endif

全部评论

相关推荐

头像
11-06 10:58
已编辑
门头沟学院 嵌入式工程师
双非25想找富婆不想打工:哦,这该死的伦敦腔,我敢打赌,你简直是个天才,如果我有offer的话,我一定用offer狠狠的打在你的脸上
点赞 评论 收藏
分享
ProMonkey2024:5个oc?厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了(别的帖子偷来的,现学现卖😋)
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
11-21 19:05
面试官_我太想进步了:混学生会的,难怪简历这么水
点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务