【编程马拉松算法目录】


【022-网页浏览历史】【工程下载>>>】


1 题目描述


  标准的网页浏览器都提供一个功能:保留最近浏览过页面的历史记录。通过后退或向前按钮就能在历史记录之间跳转。
  现在,请你模拟这个功能,接收如下三条指令:
  1. BACK:回退功能,即回退到上一个访问的页面;
  2. FORWARD:使用BACK返回上一页之后,可以使用FORWARD回到下一页;
  3. VISIT url:访问指定url的页面,并且所有FORWARD的页面都被清空。

1.1 输入描述:


  输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤100)。
  紧接着有n行,每一行包含一条指令。其中url是不包含空格、长度不超过100的非空字符串。

1.2 输出描述:


  对应每组数据,为每条指令输出当前页面的URL。
  如果当前指令无效(例如没有上一页时执行BACK指令、或没有下一页时执行FORWARD指令),则输出一行“ignore”。
  每组数据之后输出一个空行作为分隔。

1.3 输入例子:


13
VISIT http://www.acm.org/
VISIT http://acm.ashland.edu/
VISIT http://acm.baylor.edu/acmicpc/
BACK
BACK
BACK
FORWARD
VISIT http://www.ibm.com/
BACK
BACK
FORWARD
FORWARD
FORWARD

1.4 输出例子:


http://www.acm.org/
http://acm.ashland.edu/
http://acm.baylor.edu/acmicpc/
http://acm.ashland.edu/
http://www.acm.org/
ignore
http://acm.ashland.edu/
http://www.ibm.com/
http://acm.ashland.edu/
http://www.acm.org/
http://acm.ashland.edu/
http://www.ibm.com/
ignore

2 解题思路


  题目比较简单见代码注释。

3 算法实现


import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;/*** Author: 王俊超* Time: 2016-05-13 10:32* CSDN: http://blog.csdn.net/derrantcm* Github: https://github.com/Wang-Jun-Chao* Declaration: All Rights Reserved !!!*/
public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data.txt"));while (scanner.hasNext()) {int n = scanner.nextInt();List<String> visit = new ArrayList<>(n);for (int i = 0; i < n; i++) {String s = scanner.next();visit.add(s);// 如果是访问页面就再读取访问的页面RULif ("VISIT".equals(s)) {visit.add(scanner.next());}}List<String> result = history(visit);for (String url : result) {System.out.println(url);}System.out.println();}scanner.close();}/*** 记录浏览历史** @param visit 访问序列,为VISIT、BACK和FORWARD。如果是VISIT后面会一个就是直接访问的RUL* @return 访问的页面URL*/private static List<String> history(List<String> visit) {List<String> result = new ArrayList<>();// 记录访问的历史页面List<String> history = new ArrayList<>(visit.size());// 记录上一个访问的页面位置int prev = -1;for (int i = 0, j = visit.size(); i < j; i++) {String act = visit.get(i);if ("VISIT".equals(act)) {// 取URLi++;String url = visit.get(i);// 移除上一个页面的所有FROWARD页面while (history.size() > prev + 1) {history.remove(history.size() - 1);}prev++;history.add(url);result.add(history.get(prev));} else if ("BACK".equals(act)) {if (prev <= 0) {result.add("ignore");} else {prev--;result.add(history.get(prev));}} else if ("FORWARD".equals(act)) {if (prev + 1 >= history.size()) {result.add("ignore");} else {prev++;result.add(history.get(prev));}}}return result;}}

4 测试结果


5 其它信息


因为markddow不好编辑,因此将文档的图片上传以供阅读。Pdf和Word文档可以在Github上进行【下载>>>】。

【编程马拉松】【022-网页浏览历史】相关推荐

  1. JavaScriptAPI编程_History对象(获取浏览历史)

    History对象简介 JavaScript history 对象中包含了用户在浏览器中访问过的历史记录,其中包括通过浏览器浏览过的页面,以及当前页面中通过加载的页面.我们可以通过 window 对象 ...

  2. 怎么查看html页面,网页浏览记录如何查看_怎样查历史网页浏览记录-win7之家

    大家都喜欢通过浏览器来浏览一些网页,当我们浏览或者查阅网页的HIA,都会留下历史记录,这样就可以方便我们通过查看自己的网页浏览历史记录来查找了,那么网页浏览记录如何查看呢?针对这个问题,本文给大家讲解 ...

  3. 网页挖矿溯源?浏览器浏览历史查看工具Browsinghistoryview

    介绍 BrowsingHistoryView是一款用于分析windows上浏览器访问历史的实用工具,它支持读取4种不同的Web浏览器(IE浏览器,Mozilla的火狐,谷歌Chrome和Safari) ...

  4. “百度开放云编程马拉松”中国三大赛区获奖团队及作品新鲜出炉

    2013年7月20-21日,以"绿色生活"为主题,面向广大移动互联网开发者,由百度开发者俱乐部主办.InfoQ和segmentfault社区联办.WWF(世界自然基金会)作为环保公 ...

  5. “百度开放云编程马拉松”武汉赛区25件作品及团队介绍

    7月20日至21日,以"绿色生活"为主题,面向广大移动互联网开发者,由百度公司主办.InfoQ和segmentfault社区联办.WWF(世界自然基金会)作为环保公益合作伙伴的&q ...

  6. 浏览器获取浏览历史_浏览器历史的未来

    浏览器获取浏览历史 by Patryk Adaś 通过PatrykAdaś 浏览器历史的未来 (The Future of Browser History) I am really unsatisfi ...

  7. php绘制历史曲线,thinkphp浏览历史功能实现方法

    这篇文章主要介绍了thinkphp浏览历史功能实现方法,可实现浏览器的浏览历史功能,是非常实用的技巧,需要的朋友可以参考下 本文实例讲述了thinkphp浏览历史功能实现方法,分享给大家供大家参考.具 ...

  8. window对象(一) 计时器 定位导航 url解析 浏览历史 对话框 消息推送

    window对象 计时器 一个jQuery作者的写的关于定时器解释,记的顺手订阅一下.John Resig,jQuery之父 https://johnresig.com/blog/how-javasc ...

  9. 核桃编程学python吗_学编程要趁早?对话核桃编程X支付宝 “小程序编程马拉松”三强得主...

    原标题:学编程要趁早?对话核桃编程X支付宝 "小程序编程马拉松"三强得主 来源:网络 浏览专业IT技术社区网站,创作沉浸式互动体验游戏,开发辟谣小程序......这并不是程序员大神 ...

最新文章

  1. C#编程(十二)----------函数
  2. gg.gap:ggplot阶截断坐标轴的优秀完美解决方案
  3. for each java_Java 实例 - for 和 foreach循环使用
  4. Django源代码写DetailView与ListView
  5. SOTIF - 汽车感知系统验证和确认
  6. java 子目录_Java:子目录点
  7. 卡巴斯基 (Kaspersky) V7.0.0.43 NCT BATE 汉化免激活特别版(附2009-12-23Key)
  8. SWFUpload批量上传插件
  9. 笔记本电脑怎么拆开后盖_新手怎么拆解笔记本?笔记本拆机注意事项 (全文)
  10. eclipse debug 多线程
  11. Linux 使用shell命令复制文件
  12. js进栈出栈_JavaScript js调用堆栈(一)
  13. Java 独占锁ReentrantLock、读(悲观读)写锁ReentrantReadWriteLock、读(乐观读/悲观读)写锁StampedLock
  14. Linux运维基本功(贰)---Linux系统的目录结构
  15. 陕西省建筑标准规范合集
  16. R和pandas实现透视表(pivot; cast/dcast/acast)和逆透视表(melt)过程
  17. 数据分析总结二:业务与数据分析
  18. cloudSim学习
  19. 南京有哪些“牛批”的互联网公司?
  20. java.nio.charset.MalformedInputException: Input length = 2

热门文章

  1. 【方案篇】事件监听函数的内存泄漏,帮你搞定!不谢!!!
  2. 模拟下线程池队列无界或线程无限的OOM情况
  3. Extjs6.2.0搭建项目框架
  4. 遭遇职场冷暴力能怎么办?
  5. sigmastar—ISP图像调试(OBC矫正)
  6. Portainer安装
  7. 什么是云大使及如何成为云大使
  8. protostuff报错
  9. 分组交换和电路交换的计算问题
  10. 【机器学习 Alink开源】10分钟了解下阿里开源机器学习平台alink