CodinGame - MIME Type 思路

﹏ヽ暗。殇╰゛Y 2023-07-06 14:57 113阅读 0赞

题目来源:Codingmae MIME Type

要求

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

思路

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

注意无后缀文件名

代码

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

  1. public static void main(String args[]) {
  2. Scanner in = new Scanner(System.in);
  3. int N = in.nextInt(); // Number of elements which make up the association table.
  4. int Q = in.nextInt(); // Number Q of file names to be analyzed.
  5. Map<String,String> MIME = new HashMap<>();
  6. for (int i = 0; i < N; i++) {
  7. String EXT = in.next(); // file extension
  8. String MT = in.next(); // MIME type.
  9. MIME.put(EXT.toLowerCase(),MT);
  10. }
  11. //System.err.println(MIME);
  12. in.nextLine();
  13. //减少对象创建次数,所以它在循环外
  14. StringBuffer buffer = new StringBuffer();
  15. //获取后缀
  16. for (int i = 0; i < Q; i++) {
  17. String FNAME = in.nextLine().toLowerCase(); // One file name per line.
  18. //System.err.println("输入:"+FNAME);
  19. int j= FNAME.length()-1;
  20. boolean point = false;
  21. while (j>=0){
  22. if (FNAME.charAt(j) != '.'){
  23. buffer.append(FNAME.charAt(j));
  24. }
  25. else if (FNAME.charAt(j) == '.'){
  26. point = true;
  27. break;
  28. }
  29. j--;
  30. }
  31. //无后缀处理
  32. if (!point){
  33. System.out.println("UNKNOWN");
  34. buffer.delete(0,buffer.length());
  35. continue;
  36. }
  37. //有后缀处理
  38. buffer.reverse();
  39. //System.err.println(buffer);
  40. Optional<String> optional = Optional.ofNullable(MIME.get(buffer.toString().strip()));
  41. System.out.println(optional.orElse("UNKNOWN"));
  42. buffer.delete(0,buffer.length());
  43. }
  44. }

发表评论

表情:
评论列表 (有 0 条评论,113人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么是 MIME Type

    一、 首先,我们要了解浏览器是如何处理内容的。在浏览器中显示的内容有 HTML、有 XML、有 GIF、还有 Flash ……那么,浏览器是如何区分它们,决定什么内容用什么形