UVa 11988 Broken Keyboard(数组模拟链表)

时间:2022-12-03 04:51:06

题目链接:

https://cn.vjudge.net/problem/UVA-11988

 /*
问题 将一段文本经过一定的规则处理后输出,规则就是[表示home键,表示光标跳到行首,]表示end键,表示光标跳到行末 解题思路
可以发现[]是可以嵌套的,采用纯模拟比较复杂,采用类似KMP中的next数组一样,记录一下每个字符的下一个字符位置,最后
输出即可。
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<list>
const int maxn=;
using namespace std; char str[maxn];
int nex[maxn];
int main()
{
int i,len,cur,las;
//freopen("E:\\testin.txt","r",stdin);
while(scanf("%s",str+) != EOF){
len=strlen(str+);
cur=las=;
nex[]=;
for(i=;i<=len;i++){
if(str[i] == '[')
cur=;
else if(str[i] == ']')
cur=las;
else{
nex[i]=nex[cur];
nex[cur]=i;
if(cur == las) las = i;
cur =i;
}
} for(i=nex[];i != ;i=nex[i]){
printf("%c",str[i]);
}
puts("");
}
return ;
}