标签:
一个函数 | ||||||
|
||||||
Description | ||||||
现在用一个函数来处理一个字符串(该字符串只包含x和y)。 函数的两个操作如下。 1. 在字符串中找到两个连续的字符(可以不相邻),并且第一个字符是’y’,第二个字符是’x’,然后交换它们。如果一次存在多种满足该条件的连续字符,我们就找到最靠近字符串开始位置的那组进行操作。 2. 在字符串中找到两个连续的字符(可以不相邻),并且第一个字符是’x’,第二个字符是’y’, 然后从原串中将这两个字符删除。如果一次存在多种满足该条件的连续字符,我们就找到最靠近字符串开始位置的那组进行操作。 函数的运行步骤如下: Step1: 如果你对当前的字符串至少可以进行上面两个操作中的一个,就进入Step2,否则函数运行结束。 Step2:如果你可以进行1 操作就执行它。否则执行2操作1次,2操作结束后进入Step1. 请输出函数运行结束之后经过处理符串。 |
||||||
Input | ||||||
输入一个字符串,保证字符串不为空且仅由’x’和’y’组成。字符串长度为1~106。 | ||||||
Output | ||||||
输出函数返回值。
保证测试数据不会让返回值为空串。 |
||||||
Sample Input | ||||||
x yxyxy xxxxxxy |
||||||
Sample Output | ||||||
x y xxxxx |
||||||
Author | ||||||
曾卓敏 @hrbust |
思路:只要有一对xy就一定能够消除
直接用一个栈来收入当前字符,如果栈顶和当前字符不同,相当于匹配出去一个y,栈顶出栈,相反入栈。
最后输出栈内元素即可:
#include<stdio.h> #include<string.h> #include<stack> using namespace std; char a[1000050]; int main() { while(~scanf("%s",a)) { stack<char >s; int n=strlen(a); for(int i=0;i<n;i++) { if(s.size()==0)s.push(a[i]); else { if(s.top()==a[i])s.push(a[i]); else s.pop(); } } while(!s.empty()) { printf("%c",s.top()); s.pop(); } printf("\n"); } }
标签:
原文地址:http://blog.csdn.net/mengxiang000000/article/details/51355974