单词消消乐题解

按照题意模拟即可,通过观察我们会发现第一个单词永远是从后往前抵消,而第二个单词永远是从前往后抵消,所以我们用栈保存第一个单词,用队列保存第二个单词,抵消模拟即可。时间复杂度,空间复杂度

class Solution {
public:
    /**
     * 
     * @param Words string字符串vector 
     * @return string字符串
     */
    string WordsMerge(vector<string>& Words) {
        // write code here
        int n=Words.size();
        stack<char>stk;
        queue<char>q;
        for(int i=0;i<Words[0].length();i++) stk.push(Words[0][i]);
        for(int i=1;i<n;i++) {
            while(!q.empty()) q.pop();
            for(int j=0;j<Words[i].length();j++) q.push(Words[i][j]);
            while(!q.empty()&&!stk.empty()&&q.front()==stk.top()) {
                q.pop();
                stk.pop();
            }
            while(!q.empty()) {
                stk.push(q.front());
                q.pop();
            }
        }
        string ans="";
        while(!stk.empty()) {
            ans+=stk.top();
            stk.pop();
        }
        reverse(ans.begin(),ans.end());
        return ans;
    }
};

由于只要在尾部插入和删除较多的情况,并且vector和string等的线性容器本身就是栈,将答案字符串ret当做栈,设置一个指针ptr指向正在访问的字符串的str头部
如果ret.back()==ret[ptr],ret进行pop_back操作,ptr后移;否则退出比较,返回
ret+str.substr(i)即可。

class Solution {
public:
    /**
     *
     * @param Words string字符串vector
     * @return string字符串
     */
    string WordsMerge(vector<string>& Words) {
        // write code here
        string ret;
        for (int i = 0, j = 0; i < Words.size(); i++)
        {
            for (j = 0; ret.size() && Words[i].size() && Words[i][j] == ret.back(); j++,ret.pop_back());
            ret += Words[i].substr(j);
        }
        return ret;
    }
};
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
正在热议
更多
# 春招至今,你的战绩如何? #
11108次浏览 95人参与
# 你的实习产出是真实的还是包装的? #
1960次浏览 42人参与
# 巨人网络春招 #
11374次浏览 223人参与
# 军工所铁饭碗 vs 互联网高薪资,你会选谁 #
7654次浏览 43人参与
# 简历第一个项目做什么 #
31753次浏览 341人参与
# 重来一次,我还会选择这个专业吗 #
433558次浏览 3926人参与
# MiniMax求职进展汇总 #
24125次浏览 309人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
187223次浏览 1122人参与
# 牛客AI文生图 #
21452次浏览 238人参与
# 不考虑薪资和职业,你最想做什么工作呢? #
152462次浏览 888人参与
# 研究所笔面经互助 #
118967次浏览 577人参与
# 简历中的项目经历要怎么写? #
310378次浏览 4219人参与
# AI时代,哪些岗位最容易被淘汰 #
63866次浏览 828人参与
# 面试紧张时你会有什么表现? #
30517次浏览 188人参与
# 你今年的平均薪资是多少? #
213150次浏览 1039人参与
# 你怎么看待AI面试 #
180162次浏览 1258人参与
# 高学历就一定能找到好工作吗? #
64335次浏览 620人参与
# 你最满意的offer薪资是哪家公司? #
76550次浏览 374人参与
# 我的求职精神状态 #
448147次浏览 3129人参与
# 正在春招的你,也参与了去年秋招吗? #
363533次浏览 2638人参与
# 腾讯音乐求职进展汇总 #
160683次浏览 1112人参与
# 校招笔试 #
471246次浏览 2964人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务