配置文件恢复

配置文件恢复

http://www.nowcoder.com/questionTerminal/ca6ac6ef9538419abf6f883f7d6f6ee5

本题是关于字符串匹配的题。
先用哈希表将命令都存起来,然后再建立一个包含所有命令的字符串数组类型的哈希视图。然后用输入的字符串数组与该视图的每一个元素去匹配比较。

import java.util.Scanner;
import java.util.Map;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
public class Main{
    public static void main(String[] args)
    {
        Scanner sc=new Scanner(System.in);
        Map<String,String> command=new HashMap<String,String>();//建立命令哈希表
        //向哈希表里添加命令键值对
        command.put("reset","reset what");
        command.put("reset board","board fault");
        command.put("board add","where to add");
        command.put("reboot backplane","impossible");
        command.put("backplane abort","install first");
        command.put("board delet","no board at all");
        Set<String[]> order=new HashSet<String[]>();//建立哈希命令视图
        //遍历哈希表的set视图,向哈希命令表里添加命令
        for(String s:command.keySet())
        {
            order.add(s.split(" "));
        }
        while(sc.hasNextLine())
        {
            String input=sc.nextLine();
            String[] inputChange=input.split(" ");//将输入字符串用空格分隔,以便比较
            String[] compitable=null;//匹配的命令字符串
            //开始遍历命令视图
            for(String[] cmpOrder:order)
            {
                //输入字符串数组长度为一
                if(inputChange.length==1)
                {
                    //命令字符串数组长度为二,不匹配
                    if(cmpOrder.length==2)
                        continue;
                    else
                    {
                        //匹配成功
                        if(cmpOrder[0].startsWith(inputChange[0]))
                        {
                            compitable=cmpOrder;
                            break;
                        }
                    }
                }
                //输入字符串数组长度为二的情况
                if(inputChange.length==2)
                {
                    //如果待比较命令字符串长度为1,不匹配
                    if(cmpOrder.length==1)
                        continue;
                    else
                        //如果输入命令字符串与待比较命令字符串一一匹配,匹配成功
                        if(cmpOrder[0].startsWith(inputChange[0]))
                            if(cmpOrder[1].startsWith(inputChange[1]))
                            {
                                compitable=cmpOrder;
                                break;
                            }
                }
            }
            //从哈希表中找出命令的执行结果并输出
            if(compitable==null)
                System.out.println("unkown command");
            else if(compitable.length==1)
                System.out.println(command.get(compitable[0]));
            else
                System.out.println(command.get(compitable[0]+" "+compitable[1]));
        }
        sc.close();
    }
}
全部评论
忘记判断两个字符不唯一的情况
2 回复 分享
发布于 2021-01-31 01:32
17行delete和66行unknown英文错了,如果有两个匹配成功的也会正常打印,建议你加个count计数,最后的65行改为if(compitable == null && count > 1)。并且匹配成功的代码块里面让count++,break改为continue即可。代码有很多冗余的判断可以除去(只是建议!嘿嘿)。
4 回复 分享
发布于 2022-08-09 18:18
而且代码通不过呀
2 回复 分享
发布于 2020-08-26 12:02
import java.util.*; public class Main { private static Map<string> map = new LinkedHashMap<string>(); static { map.put("reset", "reset what"); map.put("reset board", "board fault"); map.put("board add", "where to add"); map.put("board delete", "no board at all"); map.put("reboot backplane", "impossible"); map.put("backplane abort", "install first"); } private static String defaultRes = "unknown command"; public static void main(String[] args) { Scanner sc = new Scanner(System.in); while(sc.hasNextLine()) { String str = sc.nextLine(); String[] strArr = str.split(" "); String results = defaultRes; if(strArr.length == 1) // 只有一个命令字符串 { for(String s1 : map.keySet()) { if(s1.startsWith(str) && s1.split(" ").length == 1) { results = map.get(s1); break; } } } else { //第一个命令串 String com1 = strArr[0]; //第二个命令串 String com2 = strArr[1]; //是否唯一的标志 int flag = 0 ; for(String s1 : map.keySet()) { String[] keyArr = s1.split(" "); if(keyArr.length == 1) { continue; } String key1 = keyArr[0]; String key2 = keyArr[1]; if(key1.startsWith(com1) && key2.startsWith(com2)) { results = map.get(s1); flag ++; } } //匹配不到或者是匹配到多个,都算匹配失败 if(flag == 0 || flag > 1) { results = defaultRes; } } System.out.println(results); } } }</string></string>
点赞 回复 分享
发布于 2022-09-21 12:59 山东
if (cmpOrder[0].startsWith(inputChange[0])) { compitable = cmpOrder; times++; }
点赞 回复 分享
发布于 2022-01-13 23:20
首先你需要记录一下两个字符串情况下匹配成功的次数来判断是否符合唯一性条件,其次你有两个单词打错了。
点赞 回复 分享
发布于 2020-09-02 21:31
好像没有判断两个字符串匹配不唯一的情况,比如示例中的第四点输入:a,b;可以加个count变量来计算当匹配两个字符串不唯一时直接返回unkown command;
点赞 回复 分享
发布于 2020-08-26 11:19

相关推荐

不愿透露姓名的神秘牛友
07-02 17:58
点赞 评论 收藏
分享
05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
投递美团等公司9个岗位
点赞 评论 收藏
分享
评论
23
1
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务