CodinGame - MIME Type 思路

题目来源:Codingmae MIME Type

要求

  • 通过文件名,输出对应的MIME类型
  • 尽可能快地处理大量数据

思路

一开始想用正则表达式,通过遍历数组查找对应的MIME,但通不过最后一个大量数据测试。那么只能用Map来存储给出的MIME类型,用StringBuffer来存储找到的文件名后缀。

注意无后缀文件名

代码

在测试的时候很有趣,一次没通过,第二次同样的代码通过了。

public static void main(String args[]) {
        Scanner in = new Scanner(System.in);
        int N = in.nextInt(); // Number of elements which make up the association table.
        int Q = in.nextInt(); // Number Q of file names to be analyzed.
        Map<String,String> MIME = new HashMap<>();
        for (int i = 0; i < N; i++) {
            String EXT = in.next(); // file extension
            String MT = in.next(); // MIME type.
            MIME.put(EXT.toLowerCase(),MT);
        }
        //System.err.println(MIME);
        in.nextLine();
        //减少对象创建次数,所以它在循环外
        StringBuffer buffer = new StringBuffer();
        //获取后缀
        for (int i = 0; i < Q; i++) {
            String FNAME = in.nextLine().toLowerCase(); // One file name per line.
            //System.err.println("输入:"+FNAME);
            int j= FNAME.length()-1;
            boolean point = false;

            while (j>=0){
                if (FNAME.charAt(j) != '.'){
                    buffer.append(FNAME.charAt(j));
                }
                else if (FNAME.charAt(j) == '.'){
                    point = true;
                    break;
                }
                j--;
            }
            //无后缀处理
            if (!point){
                System.out.println("UNKNOWN");
                buffer.delete(0,buffer.length());
                continue;
            }
            //有后缀处理
            buffer.reverse();
            //System.err.println(buffer);
            Optional<String> optional = Optional.ofNullable(MIME.get(buffer.toString().strip()));
            System.out.println(optional.orElse("UNKNOWN"));
            buffer.delete(0,buffer.length());
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值