利用栈的特点,每次对于'o'进行合并后重新入栈,对于'O'进行消除出栈。最后逆序记录栈中元素即可。
#include <bits/stdc++.h>
using namespace std;
char num[110];
int main() {
string s;
while(cin >> s) {
memset(num, 0, sizeof(num));
int start = 0, idx = 0;
while(idx < s.size()) {
num[start] = s[idx];
while(start >= 1) {
if(num[start] == num[start - 1] && num[start] == 'o') {
num[start] = 0;
num[start - 1] = 'O';
start -= 1;
} else if(num[start] == num[start - 1] && num[start] == 'O') {
num[start] = 0;
num[start - 1] = 0;
start -= 2;
} else
break;
}
start += 1, idx += 1;
}
for(int i = 0; i < start; i++)
cout << num[i];
cout << endl;
}
return 0;
}
简单的栈的性质的应用
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 给定一个后缀表达式,返回它的结果
* @param str string字符串
* @return long长整型
*/
long long legalExp(string str) {
// write code here
stack<long long> p;
long long sum = 0;
for(int i = 0; i < str.size(); i++) {
if(str[i] >= '0' && str[i] <= '9')
sum = sum * 10 + str[i] - '0';
else if(str[i] == '#') {
p.push(sum);
sum = 0;
} else if(str[i] == '+') {
long long num1 = p.top();
p.pop();
long long num2 = p.top();
p.pop();
p.push(num1 + num2);
} else if(str[i] == '-') {
long long num1 = p.top();
p.pop();
long long num2 = p.top();
p.pop();
p.push(num2 - num1);
} else if(str[i] == '*') {
long long num1 = p.top();
p.pop();
long long num2 = p.top();
p.pop();
p.push(num1 * num2);
}
}
return p.top();
}
};