【华为OJ】【100-配制文件恢复】

【华为OJ】【算法总篇章】


【华为OJ】【100-配制文件恢复】

【工程下载】


题目描述

有6条配置命令,它们执行的结果分别是:
命令                  执行
reset               reset what
reset board         board fault
board add           where to add
board delet         no board at all
reboot backplane    impossible
backplane abort     install first
he he               unkonw command

注意:he he不是命令。
为了简化输入,方便用户,以“最短唯一匹配原则”匹配:
1、若只输入一字串,则只匹配一个关键字的命令行。例如输入:r,根据该规则,匹配命令reset,
    执行结果为:reset what;输入:res,根据该规则,匹配命令reset,执行结果为:reset what;
2、若只输入一字串,但本条命令有两个关键字,则匹配失败。例如输入:reb,可以找到命令reboot backpalne,
    但是该命令有两个关键词,所有匹配失败,执行结果为:unkown command
3、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果仍不唯一,匹配失败。
    例如输入:r b,找到匹配命令reset board,执行结果为:board fault。
4、若输入两字串,则先匹配第一关键字,如果有匹配但不唯一,继续匹配第二关键字,如果唯一,匹配成功。
    例如输入:b a,无法确定是命令board add还是backplane abort,匹配失败。
5、若输入两字串,第一关键字匹配成功,则匹配第二关键字,若无匹配,失败。例如输入:bo a,确定是命令board add,匹配成功。
6、若匹配失败,打印“unkonw command”

输入描述

多行字符串,每行字符串一条命令

输出描述

执行结果,每条命令输出一行

输入例子

reset
reset board
board add
board delet
reboot backplane
backplane abort

输出例子

reset what
board fault
where to add
no board at all
impossible
install first

算法实现

import java.util.*;

/**
 * Author: 王俊超
 * Time: 2016-05-04 21:02
 * CSDN: http://blog.csdn.net/derrantcm
 * Github: https://github.com/Wang-Jun-Chao
 * Declaration: All Rights Reserved !!!
 */
public class Main {

    private final static String[] ACTION = {
            "reset", "reset what",
            "reset board", "board fault",
            "board add", "where to add",
            "board delet", "no board at all",
            "reboot backplane", "impossible",
            "backplane abort", "install first"
    };

    private final static String UC = "unkown command";

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
//        Scanner scanner = new Scanner(Main.class.getClassLoader().getResourceAsStream("data2.txt"));
        List<String> cmds = new LinkedList<>();
        while (scanner.hasNextLine()) {
            String cmd = scanner.nextLine();
            cmds.add(cmd);
//            System.out.println(num + " " + command);
        }
        System.out.print(fileRestore(cmds));
        scanner.close();
    }

    private static String fileRestore(List<String> cmds) {

        StringBuilder builder = new StringBuilder();
        for (String cmd : cmds) {
//            System.out.println(cmd + ": " + getAction(cmd));
            builder.append(getAction(cmd)).append(‘\n‘);
        }
        return builder.toString();
    }

    private static String getAction(String cmd) {

        String[] part = cmd.split("(\\s)+");

        // 如果是一字串,只有第一个命令是一字串
        if (part.length == 1) {
            // 是以part[0]开头
            if (ACTION[0].startsWith(part[0])) {
                // 返回执行命令
                return ACTION[1];
            } else {
                return UC;
            }
        } else if (part.length == 2) {
            // 除了第一个命令其它的都是二字串
            int count = 0;
            String result = UC;
            // 检查是否匹配命令
            for (int i = 2; i < ACTION.length; i += 2) {
                String[] cmdPart = ACTION[i].split("(\\s)+");
                if (cmdPart[0].startsWith(part[0]) && cmdPart[1].startsWith(part[1])) {
                    count++;
                    result = ACTION[i + 1];
                }
            }

            // 刚好找到一个匹配的
            if (count == 1) {
                return result;
            }
            // 没有找到或者找到多个匹配的
            else {
                return UC;
            }

        }
        // 除了一字串和二字串,没有其它串
        else {
            return UC;
        }
    }
}
时间: 2024-10-27 11:52:20

【华为OJ】【100-配制文件恢复】的相关文章

【华为OJ】201301 JAVA 题目0-1级 将数组分为相等的两组

描述:  编写一个函数,传入一个int型数组,返回该数组能否分成两组,使得两组中各元素加起来的和相等,并且,所有5的倍数必须在其中一个组中,所有3的倍数在另一个组中(不包括5的倍数),能满足以上条件,返回true:不满足时返回false. 知识点: 语言基础,字符串,循环,函数,指针,枚举,位运算,结构体,联合体,文件操作,递归    题目来源: 内部整理  练习阶段: 初级  运行时间限制: 10Sec 内存限制: 128MByte 输入: 输入输入的数据个数 输入一个int型数组 输出: 返

【华为OJ】【092-学英语】

[华为OJ][算法总篇章] [华为OJ][092-学英语] [工程下载] 题目描述 Jessi初学英语,为了快速读出一串数字,编写程序将数字转换成英文: 如22:twenty two,123:one hundred and twenty three. 说明 数字为正整数,长度不超过十位,不考虑小数,转化结果为英文小写: 输出格式为twenty two: 非法数据请返回"error": 关键字提示:and,billion,million,thousand,hundred. 方法原型:pu

【华为OJ】【082-字符串通配符】

[华为OJ][算法总篇章] [华为OJ][082-字符串通配符] [工程下载] 题目描述 问题描述:在计算机中,通配符一种特殊语法,广泛应用于文件搜索.数据库.正则表达式等领域.现要求各位实现字符串通配符的算法. 要求: 实现如下2个通配符: *:匹配0个或以上的字符(字符由英文字母和数字0-9组成,不区分大小写.下同) ?:匹配1个字符 输入描述 通配符表达式: 一组字符串. 输出描述 返回匹配的结果,正确输出true,错误输出false 输入例子 先输入一个带有通配符的字符串,再输入一个需要

【华为OJ】【076-蛇形矩阵】

[华为OJ][算法总篇章] [华为OJ][076-蛇形矩阵] [工程下载] 题目描述 题目说明 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 样例输入 5 样例输出 1 3 6 10 15 2 5 9 14 4 8 13 7 12 11 输入描述 输入正整数N(N不大于100) 输出描述 输出一个N行的蛇形矩阵. 输入例子 4 输出例子 1 3 6 10 2 5 9 4 8 7 算法实现 import java.util.Scanner; /** * Author: 王俊超 * Da

华为OJ题目

题目描述: 新入职华为的小伙伴们都有在oj上面刷题的任务,共需要刷100道初级题,45道中级题,5道高级题,其中,做出来的高级题如果超标可以当初级或者中级题,做出来的中级题如果超标可以当初级题.每天,出题的大哥会给大家出Xi道题,这Xi道题属于同一个难度级别,小伙伴们要么用一天时间把这些题全做出来,要么就不做.现在,给你每天出题大哥出的题数以及难度,请问,小伙伴们最少要挑选其中几天去做题,才能把这150道题的任务完成呢? 输入示例: 5 100 70 5 5 55 1 2 2 2 3 输出: 2

【华为OJ】【074-素数伴侣】

[华为OJ][算法总篇章] [华为OJ][074-素数伴侣] [工程下载] 题目描述 若两个正整数的和为素数,则这两个正整数称之为"素数伴侣",如2和5.6和13,它们能应用于通信加密. 现在密码学会请你设计一个程序,从已有的N(N为偶数)个正整数中挑选出若干对组成"素数伴侣",挑选方案多 种多样,例如有4个正整数:2,5,6,13,如果将5和6分为一组中只能得到一组"素数伴侣",而将2和5.6和13 编组将得到两组"素数伴侣"

【华为OJ】【069-简单错误记录】

[华为OJ][算法总篇章] [华为OJ][069-简单错误记录] [工程下载] 题目描述 开发一个简单错误记录功能小模块,能够记录出错的代码所在的文件名称和行号. 处理: 1. 记录最多8条错误记录,循环记录,对相同的错误记录(净文件名称和行号完全匹配)只记录一条,错误计数增加: 2. 超过16个字符的文件名称,只记录文件的最后有效16个字符: 3. 输入的文件可能带路径,记录文件名称不能带路径. 输入描述 一行或多行字符串.每行包括带路径文件名称,行号,以空格隔开. 输出描述 将所有的记录统计

华为OJ IP地址判断有效性

题目标题: 判断输入的字符串是不是一个有效的IP地址 详细描述: 请实现如下接口 boolisIPAddressValid(constchar* pszIPAddr) 输入:pszIPAddr 字符串 输出:true 有效的IP地址,false,无效的IP地址 约束 输入IP为XXX.XXX.XXX.XXX格式 字符串两端含有空格认为是合法IP 字符串中间含有空格认为是不合法IP 类似于 01.1.1.1, 1.02.3.4  IP子段以0开头为不合法IP 子段为单个0 认为是合法IP,0.0.

【华为OJ】【063-字符串分割】

[华为OJ][算法总篇章] [华为OJ][063-字符串分割] [工程下载] 题目描述 连续输入字符串(输出次数为N,字符串长度小于100),请按长度为8拆分每个字符串后输出到新的字符串数组, 长度不是8整数倍的字符串请在后面补数字0,空字符串不处理. 首先输入一个整数,为要输入的字符串个数. 例如: 输入: 2 abc 12345789 输出: abc00000 12345678 90000000 输入描述 首先输入数字n,表示要输入多少个字符串.连续输入字符串(输出次数为N,字符串长度小于1