当前位置:   article > 正文

双端队列,LeetCode 2810. 故障键盘

双端队列,LeetCode 2810. 故障键盘

一、题目

1、题目描述

你的笔记本键盘存在故障,每当你在上面输入字符 'i' 时,它会反转你所写的字符串。而输入其他字符则可以正常工作。

给你一个下标从 0 开始的字符串 s ,请你用故障键盘依次输入每个字符。

返回最终笔记本屏幕上输出的字符串。

2、接口描述

​​cpp
  1. class Solution {
  2. public:
  3. string finalString(string s) {
  4. }
  5. };
  python3
  1. class Solution:
  2. def finalString(self, s: str) -> str:

3、原题链接

2810. 故障键盘


二、解题报告

1、思路分析

反转<=>往字符串的头部添加字符

那么遍历的时候维护方向然后添加字符即可

这要求两端都能添加元素的数据结构所以可以想到双端队列

2、复杂度

时间复杂度:O(n) 空间复杂度:O(n)

3、代码详解

​cpp
  1. class Solution {
  2. public:
  3. string finalString(string s) {
  4. deque<char> dq;
  5. bool rev = 0;
  6. for(char ch : s){
  7. if(ch == 'i') rev ^= 1;
  8. else if(rev) dq.push_front(ch);
  9. else dq.push_back(ch);
  10. }
  11. return rev ? string(dq.rbegin(), dq.rend()) : string(dq.begin(), dq.end());
  12. }
  13. };
 python3
  1. class Solution:
  2. def finalString(self, s: str) -> str:
  3. q = deque()
  4. rev = True
  5. for x in s:
  6. if x == 'i':
  7. rev = not rev
  8. elif rev:
  9. q.append(x)
  10. else:
  11. q.appendleft(x)
  12. return ''.join(q if rev else reversed(q))

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/382799
推荐阅读
相关标签
  

闽ICP备14008679号