【编程马拉松】【022-网页浏览历史】

【编程马拉松算法目录】


【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);
                // 如果是访问页面就再读取访问的页面RUL
                if ("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)) {

                // 取URL
                i++;
                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上进行【下载>>>】

时间: 2024-09-30 11:12:16

【编程马拉松】【022-网页浏览历史】的相关文章

网页浏览历史纪录(Cookie技术)

一.实现原理: 首先创建一个Cookie用于记录访问网页的编号:或者商品的编号 每次访问完就往这个Cookie中更新新的数据(新建Cookie重新添加,主要用于访问的页面在原有历史纪录中已经存在,需要删除原有纪录重新添加) 在需要显示的历史纪录的数据准备页面进行获取,然后转发给显示JSP页面,进行显示. 二.DEMO 图书数据准备页面:ShowBookList (Servlet) package com.heima.demo1; import java.io.IOException; impor

网页浏览历史

题目描述 标准的网页浏览器都提供一个功能:保留最近浏览过页面的历史记录.通过后退或向前按钮就能在历史记录之间跳转. 现在,请你模拟这个功能,接收如下三条指令: 1. BACK:回退功能,即回退到上一个访问的页面: 2. FORWARD:使用BACK返回上一页之后,可以使用FORWARD回到下一页: 3. VISIT url:访问指定url的页面,并且所有FORWARD的页面都被清空. 输入描述: 输入包含多组数据,每组数据第一行包含一个正整数n(1≤n≤100). 紧接着有n行,每一行包含一条指

站点分析基础概念网页浏览数

■网页浏览数 类型: 计数度量 定义:网页浏览数(Page Views,简称PV)是指网页被浏览的次数. 仅仅要网页与server端完毕一次请求,网页的浏览数就被累加一次. 说明:为了便于大家的理解,以下举例说明一下. 下图是訪问者A.B的訪问网页履历. 每个方框表示一个网页. 编号同样的表示同一个网页. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcGhwZmVuZ2h1bw==/font/5a6L5L2T/fontsize/400/fill/I0

网站分析基础概念网页浏览数

■网页浏览数 类型: 计数度量 定义:网页浏览数(Page Views,简称PV)是指网页被浏览的次数.只要网页与服务器端完成一次请求,网页的浏览数就被累加一次. 说明:为了便于大家的理解,下面举例说明一下.下图是访问者A.B的访问网页履历.每一个方框表示一个网页.编号相同的表示同一个网页. 通过图例我们可以清楚的看到访问者A与B在此次访问中分别访问了4个网页(网页被显示,网页浏览数数增加1),那么访问者A.B的网页浏览数分别为4. 这个概念就是这样简单.但是还有一些网页浏览数特殊例子给大家补充

BOM 浏览器对象模型_当前窗口的浏览历史 history 对象

当前窗口的浏览历史 window.history 对象 保存了当前窗口访问过的所有页面网址 由于安全原因,浏览器不允许脚本读取这些地址,但是允许在地址之间导航 history.back() 相当于 history.go(-1) 浏览器工具栏的 “前进” 和 “后退” 按钮,其实就是对 History 对象进行操作 // 当前窗口访问过多少个网页 window.history.length // 1 // History 对象的当前状态 // 通常是 undefined,即未设置 window.h

hdu 4542 数论 + 约数个数相关 腾讯编程马拉松复赛

题目:http://acm.hdu.edu.cn/showproblem.php?pid=4542 小明系列故事--未知剩余系 Time Limit: 500/200 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) Total Submission(s): 889    Accepted Submission(s): 207 Problem Description "今有物不知其数,三三数之有二,五五数之有三,七七数之有

12 款不能少的使网页浏览获得的最佳体验Chrome 扩展

原文地址:http://whosmall.com/?post=414 本文标签: Chrome扩展 网页浏览体验 引擎划词翻译工具 Chrome浏览器 相信不少朋友和我一样,每安装新的操作系统之后,都会使用 Safari/IE 下载 Chrome 浏览器,然后将后者作为主力上网浏览器,而将前者束之高阁.毕竟从体验上说,Chrome拥有快速流畅的浏览体验,当然强大丰富的扩展也是让我一见倾心的关键. 此前我们向各位介绍了数款颇受欢迎的 Chrome 扩展,而今天笔者我起一回私心,给大家安利一些我正在

Asp.net 使用正则和网络编程抓取网页数据(有用)

Asp.net 使用正则和网络编程抓取网页数据(有用) /// <summary> /// 抓取网页对应内容 /// </summary> /// <param name="strUrl">採集地址</param> /// <param name="Begin">開始字符</param> /// <param name="End">结束字符</param&g

HDU 4508 湫湫系列故事——减肥记I (2013腾讯编程马拉松初赛第一场)

http://acm.hdu.edu.cn/showproblem.php?pid=4508 题目大意: 给定一些数据. 每组数据以一个整数n开始,表示每天的食物清单有n种食物. 接下来n行,每行两个整数a和b,其中a表示这种食物可以带给湫湫的幸福值(数值越大,越幸福),b表示湫湫吃这种食物会吸收的卡路里量. 最后是一个整数m,表示湫湫一天吸收的卡路里不能超过m. 思路: 完全背包. 一开始以为是01背包. 敲了01后样例2不对啊!!! 然后改成完全就过了..就改循环体就好了.. #includ