自学内容网 自学内容网

【数据结构-队列】力扣2810. 故障键盘

双端队列

class Solution {
public:
    string finalString(string s) {
        deque<int> que;
        int k = 0;  
        for(char c : s){
            if(c == 'i'){
                k = ~k;
                continue;
            }

            if(k == 0){
                que.push_back(c);
            }
            else{
                que.push_front(c);
            }
        }

        string res = "";
        if(k == 0){
            while (!que.empty()) {
                res += que.front(); // 获取 front 的值
                que.pop_front();    // 移除 front 元素
            }
        }
        else{
            while (!que.empty()) {
                res += que.back();  // 获取 back 的值
                que.pop_back();     // 移除 back 元素
            }
        }
        return res;
    }
};

时间复杂度:O(n),其中 n 是字符串 s 的长度。

空间复杂度:O(n),即为双端队列需要使用的空间。

我们可以发现,反转可以看作改变添加字符的方向,所以我们定义一个双端队列que和一个用来判断方向的k,一旦遇到i就令k取反,然后来判断要从前面加入元素还是后面加入元素,最后根据k的方向来从前往后或者从后往前来输出双端队列的字符,储存在res中。


原文地址:https://blog.csdn.net/sjsjs11/article/details/144042242

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!