题目如下:
大体意思就是,用键盘敲字,碰到 “[” 符号就从第一位开始敲,如果碰到 “]” 符号就从最后一位开始敲。上面?题目里有例子。
下面是我用c语言实现的代码(静态数组):
#include <stdio.h>
#define maxn 100000+10
int cur,last;//cur表示当前从哪一个位置开始敲,last表示最后一位所在的位置
int next[maxn];//每个字的下一位在什么地方
char text[maxn];//存储输入的字符串
int main(){
while(scanf("%s",text+1) == 1){//把0空出来,做头
cur = last = next[0] = 0;//初始化变量
int i;
for(i = 1;text[i];i++){
if(text[i] == '[') cur = 0;//碰到 [ 就跳到前面
else if(text[i] == ']') cur = last;//碰到 ] 就跳到后面
else{
next[i] = next[cur];//相当于链表插入元素
next[cur] = i;
if(cur == last) last = i;//更新最后一位
cur = i;//更新当前位
}
}
for(i = next[0]; i ;i = next[i])//从第一位开始遍历
printf("%c",text[i]);
printf("\n");
}
return 0;
}