奇怪的键盘(2015蓝桥杯)

题目是这样的:

奇怪的键盘

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 122  Solved: 24
[Submit][Status][Forum]

Description

近期科学家们在熬夜写论文报告,可是不争气的键盘出现了一系列的问题,有的时候点一下键盘往外出两个字符,有的时候只出一个。恰巧键盘的退格键坏了。
你知道科学家们都是有怪脾气的,他自己打出一篇文章,他就像恢复成原来的.
科学家满意的字符串是这样的,如果字符串中有相临的两个字符相同就消除这两个字符,形成一个新的字符串,如果新的字符串还有相邻的字符并且相同,再消除。一直到没有相邻的两个字符相同为止。

Input

一个字符串,长度不大于2*10^5,只包含小写字母

Output

令科学家满意的字符串。

Sample Input

reallazy

Sample Output

rezy

HINT

对于样例中的字符串这样变化的,reallazy -> reaazy -> rezy.

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

今天的时候被同学来问了一下这个题0.0。

仔细想想也就是一个压栈弹栈的问题,写个栈也就过了23333

(注意读题,只可能有两个相同字母相邻的情况,不用考虑太多233333)

代码如下:

C:

 1 #include<stdio.h>
 2  
 3 #define MAX 200001
 4  
 5 struct Stack{
 6     char sz[MAX];
 7     long index;
 8 }S; 
 9  
10 int main()
11 {
12     S.index = 0;
13     char ip = 0;
14     while (EOF != scanf("%c", &ip))
15     {
16         if (ip != S.sz[S.index - 1])
17             S.sz[S.index++] = ip;
18         else
19             S.index--;
20     }
21     for (int i = 0; i < S.index; i++)
22     {
23         putchar(S.sz[i]);
24     }
25     return 0;
26 }

C++:

 1 #include<iostream> 
 2 #include <deque>
 3 
 4 using namespace std;
 5 
 6 int main()
 7 {
 8     ios::sync_with_stdio(false);
 9     deque<char> d;
10     char ip;
11     while (cin >> ip)
12     {
13         if (d.size() && ip == d.back())
14             d.pop_back();
15         else
16             d.push_back(ip);
17     }
18     while (d.size())
19     {
20         cout << d.front();
21         d.pop_front();
22     }
23     return 0;
24 }

Java:

 1 import java.util.Scanner;
 2 
 3 public class Main {
 4     public static void main(String[] args) {
 5         int a = 0;
 6         Scanner sc = new Scanner(System.in);
 7         char[] sz = new char[200001];
 8         int index = 0;
 9         int i = 0;
10         String str;
11         while(sc.hasNext())
12         {
13             str = sc.next();
14             while(index < str.length())
15             {
16                 if(i > 0 && str.charAt(index) == sz[i - 1])
17                 {
18                     i--;
19                 }
20                 else
21                 {
22                     sz[i++] = str.charAt(index);
23                 }
24                 index++;
25             }
26             for(int j = 0; j < i; j++)
27             {
28                 System.out.print(sz[j]);
29             }
30             i = 0;
31             index = 0;
32         }
33     }
34 }

碎碎念:java一次只能处理65534个字符, 如果只跑一次会WA掉。。。。。

猜你喜欢

转载自www.cnblogs.com/lost-legacy/p/12112008.html