【数据结构-队列】力扣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)!