题目描述
小G最近在玩一个字符消除游戏。给定一个只包含大写字母的字符串s,消除过程是如下进行的:
(1)从前往后如果在s中找到连续两个相同的字母,那么这两个连续相同的字母会被同时消除,余下的字串拼成新的字符串。
(2)反复重复步骤(1),直到新的字符串不包含相邻的相同字符为止。
输入
ABAABAC经过第一轮得到ABBAC,经过第二轮得到AAC,经过第三轮得到C
输出
一个字符串s(s的长度不超过1e6)
样例输入
ABAABAC
样例输出
C
这题模拟就行 也没啥思路
#include <stdio.h>
#include <string.h>
#include <math.h>
const int MAXN = 1e6+10;
char data[MAXN];
char temp[MAXN];
int main()
{
scanf("%s", data);
while(1)
{
int flag = 0, len = strlen(data);
for(int i = 0; i < len; i++)//寻找相邻的字符
{
if(data[i] == data[i+1])
{
data[i] = data[i+1] = 0;
flag = 1;//标记是否有能消除的字符
}
}
int j = 0;
for(int i = 0; i < len; i++)
{
if(data[i] != 0)
{
temp[j] = data[i];
j++;
}
}
strcpy(data, temp);//将消除字符后的数组重新复制回原数组 重复使用len
memset(temp, 0, sizeof(temp));//清空存储数组
if(!flag) break;//没有就跳出
}
printf("%s\n", data);
return 0;
}