向量和数组的优势是可以随机的存取元素和在末尾添加删除元素,而当插入元素时,需要移动大量的数据,消耗大量的时间。而链表的优势是可以在O(1)删除和插入数据。所以在频繁移动元素时,可以使用链表。

分析:如果用一个数组来保存,题目中的文本随着光标位置的移动需不断的插入字符,这样会导致大量字符移动问题。解决方案是采用链表,将字符串保存在buf[1...n]中,然后用next[i]表示下标为i的字符的下一个位置的下标(链表不一定用指针实现)。为了方便起见,用一个虚拟的next[0]指向显示屏最右边的字符下标。再用cur表示光标的位置,即为光标在buf[cur]的右边.cur==0说明光标在显示屏的最左边。还用last表示显示屏最右边的字符。

#define _CRT_SECURE_NO_DEPRECATE
#include <iostream>
#include<string.h>
#include <algorithm>
using namespace std;
const int maxn = 100000 + 5;char buf[maxn];
int Next[maxn];int main(){int cur, last,n;while (scanf("%s", buf+1)!=EOF){n = strlen(buf + 1);cur = last = 0;for (int i = 1; i <= n; i++){if (buf[i] == '[')cur = 0;    //house键else if (buf[i] == ']')cur = last; //end键else{Next[i] = Next[cur];   //字符i的下一个位置为cur的下一个位置Next[cur] = i;         //curr的下一个位置为i//更新cur和lastif (cur == last)last = i;   //cur等于i表示光标在显示屏最后一个字符cur = i;  //移动光标}}Next[last] = 0;  //结束位置for (int i = Next[0]; i != 0; i = Next[i])printf("%c", buf[i]);printf("\n");}return 0;
}

  

转载于:https://www.cnblogs.com/td15980891505/p/5915814.html

UVa11988 Broken Keyboard(练习链表使用)相关推荐

  1. UVA11988 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 problemwit ...

  2. UVa11988 Broken Keyboard (a.k.a. Beiju Text)

    题目复制太麻烦了,甩个链接 http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=18693 直接模拟光标操作时间复杂度较高,所以用链 ...

  3. 例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988)

    例题6-4 破损的键盘(又名:悲剧文本)(Broken Keyboard(a.k.a. Beiju Text), UVa 11988) 链表的应用 #include<iostream> # ...

  4. Broken Keyboard (a.k.a. Beiju Text)

    原题及翻译 Broken Keyboard (a.k.a. Beiju Text) 破碎的键盘(a.k.a. Beiju Text) You're typing a long text with a ...

  5. 【刘汝佳代码详解】例题6-4破损的键盘(Broken Keyboard,UVa 11988)

    立志用最少的代码做最高效的表达 You're typing a long text with a broken keyboard. Well it's not so badly broken. The ...

  6. UVa11988-破损的键盘 Broken Keyboard

    题目描述 You're typing a long text with a broken keyboard. Well it's not so badly broken. The only probl ...

  7. PAT甲级1084 Broken Keyboard:[C++题解]字符串处理、双指针算法

    文章目录 题目分析 题目来源 题目分析 来源:acwing ac代码1:双指针算法 读入两个字符串a和b,用两个指针i和j分别遍历a.b.如果a[i] ==b[j],说明键盘没坏,j往后移动一个:如果 ...

  8. PAT Broken Keyboard (20)

    题目描写叙述 On a broken keyboard, some of the keys are worn out. So when you type some sentences, the cha ...

  9. 【简便解法】1084 Broken Keyboard (20 分)_16行代码AC

    立志用最少的代码做最高效的表达 PAT甲级最优题解-->传送门 On a broken keyboard, some of the keys are worn out. So when you ...

最新文章

  1. opencv算法+人脸检测
  2. java公寓管理系统设计与实现_学生公寓(宿舍)管理系统的设计与实现(论文范文, jspjava).docx_蚂蚁文库...
  3. java 常用接口的实现--compareable
  4. 【Android 内存优化】Android Profiler 工具常用功能 ( 监测内存 | 内存快照 )
  5. java构造函数调用其他程序的顺序_java初始化构造函数调用顺序
  6. java servlet 接收post_java 代码post表单数据到服务器,servlet接收处理
  7. 51单片机入门教程(6)——外部中断
  8. java 方法_Java 方法 | 菜鸟教程
  9. 代码的自动生成...
  10. java中do until_RxJava—takeUntil实践
  11. win10右键卡顿原因_个个都能惊呆你WIN10小技巧分享(无需安装第三方软件)
  12. 用java编写圆锥,java编写圆锥形体积
  13. 开源APM性能检测系统技术选型与架构实战
  14. interactive governor study for android
  15. 微带线 带状线 过孔的时延对比
  16. 2020.04.01 【ABAP随笔】- ABAP面试分享
  17. 多智能体深度强化学习综述与批判——Matthew E. Taylor
  18. Roslyn导致发布网站时报错-编译失败
  19. JZOJ3918 蛋糕
  20. 「什么是REITs基金」一文说清楚REITs基金简介 如何配置REITs产品

热门文章

  1. gvim同时处理中日韩文
  2. [react] 在React中如何判断点击元素属于哪一个组件?
  3. [html] 请说说input的inputmode属性有什么应用场景?
  4. [html] 实现一个页面锁屏的功能
  5. 前端学习(2879)歌谣学习篇原生js和canvas实现弹幕功能
  6. [vue] v-on可以绑定多个方法吗?
  7. [css] 如何给段落的首行缩进?
  8. 前端学习(2182):keep-alive及其他问题
  9. 前端学习(1951)vue之电商管理系统电商系统之获取父级数据列表
  10. 前端学习(1679):前端系列实战课程之为蛇创建食物对象