题目链接:https://vjudge.net/problem/UVA-11988

题目大意:输入一个字符串,输出在原本应该是怎么样的?  具体方法是 碰到' [ ' 回到最前面  碰到‘ ]’  回到最后面。

思路:很容易可以想到用数组来写,但是仔细分析一下,每次你把一个字符插入到最前面,它后面的字符全都要往后移,那么复杂度是多大呢?  最差的情况,每一个都插在最前面,呢么复杂度是

n*n   肯定超时的。  应用链表则只有n的复杂度了。  这是我接触到的第一道链表题目,说的详细一点:

比如   abcde    如果你要在ab  之间插入f   那么你首先把f的后继改为a的后继,a的后继改为f  这就插入完成了   其实这就是核心了。  但是为了方便  我们通常设置一个头结点  [0]   从1开始存数据:

下面看代码:

#include<iostream>
#include<string.h>
#include<vector>
#include<stdio.h>
using namespace std;
const int maxn=1e5+;
int main()
{
char a[maxn];
int next[maxn];
while(scanf("%s",a+)!=EOF)//存在s[1] s[2]~~~~中
{
int len=strlen(a+);//保存在s[1] s[2]~~~~中
int cur=;//光标在的位置 下次插入在光标所在位置后面一位
int last=;//最后一位所在的位置
next[]=;//初始化
for(int i=;i<=len;i++)//遍历一遍
{
char c=a[i];
if(c=='[') cur=;//光标调到最前面
else if(c==']') cur=last;//光标调到最后面
else
{
next[i]=next[cur];//这两个操作就是节点的插入
next[cur]=i;
if(cur==last) last=i;//更新最后一个字符的编号
cur=i;//光标移动
}
}
for(int i=next[];i!=;i=next[i]) printf("%c",a[i]);//按照链表输出
printf("\n");
}
return ;
}

Broken Keyboard (a.k.a. Beiju Text) UVA - 11988 (链表)的更多相关文章

  1. 破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988)

    破损的键盘(悲剧文本)(Broken Keyboard(a.k.a. Beiju Text),Uva 11988) 题意描述 你在输入文章的时候,键盘上的Home键和End键出了问题,会不定时的按下. ...

  2. Broken Keyboard (a.k.a. Beiju Text) UVA - 11988

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  3. B - Broken Keyboard (a.k.a. Beiju Text) 数组模拟链表

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

  4. uva - Broken Keyboard (a.k.a. Beiju Text)(链表)

    11988 - Broken Keyboard (a.k.a. Beiju Text) You’re typing a long text with a broken keyboard. Well i ...

  5. UVA——11988 Broken Keyboard (a.k.a. Beiju Text)

    11988 Broken Keyboard (a.k.a. Beiju Text)You’re typing a long text with a broken keyboard. Well it’s ...

  6. B - Broken Keyboard (a.k.a. Beiju Text)

    Problem B Broken Keyboard (a.k.a. Beiju Text) You're typing a long text with a broken keyboard. Well ...

  7. N - Broken Keyboard (a.k.a. Beiju Text)(DFS,链表)

    N - Broken Keyboard (a.k.a. Beiju Text) Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:% ...

  8. UVA 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)

    题目代号:UVA 11988 题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&pa ...

  9. UVa 11988 Broken Keyboard (a.k.a. Beiju Text)(链表)

    You're typing a long text with a broken keyboard. Well it's not so badly broken. The only problem wi ...

随机推荐

  1. Linux网络服务管理命令

    netstat命令 示例:查看指定的服务是否开启netstat | grep ssh | grep -v grep 网络下载器————wget wget是一个Linux环境下用于从WWW上提取文件的工 ...

  2. Entity Framework Tutorial Basics(1):Introduction

    以下系列文章为Entity Framework Turial Basics系列 http://www.entityframeworktutorial.net/EntityFramework5/enti ...

  3. js教程--从入门到精通 第一篇 js的前世今生以及js中基本数据类型和引入方式

    1.Javascript前世今生   1.1.什么是Javascript       Javascript运行于Javascript [解释器/引擎]中的解释性脚本语言      Javascript ...

  4. C++面试笔记--循环链表,队列,栈,堆

    之前已经学会了单链表的建立删除插入转置以及一些普通操作,双链表和单链表差不多,就是多了一个前驱指针,在许多操作中很方便,但是加了一个指针开销应该会大一些,总体上影响不大,这里开始讨论循环链表以及其他的 ...

  5. Sass和Compass设计师指南 Ben Frain 中文高清PDF扫描版​

    Sass和Compass设计师指南是<响应式Web设计:HTML5和CSS3实战>作者Ben Frain的又一力作.作者通过丰富.完整的案例,循序渐进地展示了Sass和Compass的使用 ...

  6. android studio中退出时弹出对话框

    在app中总是不小心点击了退出怎么办?当然是加个弹出的提示框了,本人新手,就加在主界面上了 @Override public boolean onKeyDown(int keyCode, KeyEve ...

  7. 在控制台使用MySQL数据库

    本篇内容介绍的是如何在控制台下使用MySQL数据库.首先需要安装MySQL数据库应用程序,然后找到MySql的Command Line Client进入之后你会看到,此处需要正确输入密码,否则会直接退 ...

  8. C# console application executing macro function

    C#控制台应用程序,执行或运行Office的宏函数,程序如下: 应用例子:

  9. Login failed for user 'xxx'

    今天零晨,正准备晚睡,有一网友在skype求救,意思是说,恢复专案的数据库之后,死活登录不了.出现的错误如下: Insus.NET叫他参考下面方法来做:http://www.cnblogs.com/i ...

  10. javascript jquery封装对象时的错误,求解!我想知道为什么

    jquery   封装对象时的错误 --------------------------------------------<input id="name" name=&qu ...