思路:栈 + 模拟
将所有操作对应的字符压栈,每次遇到撤销操作 时,判断栈是否为空,若不为空则弹出栈顶元素,相当于撤销一次操作,若为空则不做操作。由于四种操作都单独在
轴或单独在
轴上移动,所以与操作顺序无关,依次从栈里弹出操作并依次执行即可。
代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
string a;
cin >> a;
stack<char> s;
int x = 0, y = 0;
for(int i = 0; i < n; i++) {
if(a[i] != 'Z') s.push(a[i]);
else if(!s.empty()) s.pop();
}
while(!s.empty()) {
char c = s.top();
s.pop();
if(c == 'W') y++;
else if(c == 'A') x--;
else if(c == 'S') y--;
else if(c == 'D') x++;
}
cout << x << " " << y << endl;
} 复杂度分析
时间复杂度:
空间复杂度:,利用了辅助栈



京公网安备 11010502036488号