1 题目描述

题目来源: https://leetcode-cn.com/problems/reformat-date

给你一个字符串 date ,它的格式为 Day Month Year ,其中:

  • Day 是集合 {"1st", "2nd", "3rd", "4th", ..., "30th", "31st"} 中的一个元素。
  • Month 是集合 {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"} 中的一个元素。
  • Year 的范围在 ​[1900, 2100] 之间。

请你将字符串转变为 YYYY-MM-DD 的格式,其中:

  • YYYY 表示 4 位的年份。
  • MM 表示 2 位的月份。
  • DD 表示 2 位的天数。

示例 1:

输入:date = "20th Oct 2052"
输出:"2052-10-20"
示例 2:
输入:date = "6th Jun 1933"
输出:"1933-06-06"
示例 3:
输入:date = "26th May 1960"
输出:"1960-05-26"

提示:

给定日期保证是合法的,所以不需要处理异常输入。

通过次数11,760提交次数19,952

2 解题思路与代码

2.1 原始解决方法

2.1.1 思路(略)

2.1.2 源码(Java)

class Solution {
public String reformatDate(String date) {
Map<String, String> monthMap = new HashMap<>();
monthMap.put("Jan", "01");
monthMap.put("Feb", "02");
monthMap.put("Mar", "03");
monthMap.put("Apr", "04");
monthMap.put("May", "05");
monthMap.put("Jun", "06");
monthMap.put("Jul", "07");
monthMap.put("Aug", "08");
monthMap.put("Sep", "09");
monthMap.put("Oct", "10");
monthMap.put("Nov", "11");
monthMap.put("Dec", "12"); String [] dateArray = date.split(" ");
StringBuilder resultStrBuilder = new StringBuilder();
resultStrBuilder.append(dateArray[2]+"-");//year
resultStrBuilder.append(monthMap.get(dateArray[1])+"-");//month
resultStrBuilder.append(String.format("%02d", Integer.valueOf(dateArray[0].substring(0, dateArray[0].length()-2))));//day
return resultStrBuilder.toString();
}
}

2.2 官方解法

思路

\[思路与算法
\]
\[首先,我们可以按照空格把字符串分割成三部分,分别取出日、月、年。对于他们分别做这样的事情:
\]
\[日:去掉结尾的两位英文字母,如果数字只有一位再补上前导零
\]
\[月:使用字典映射的方式把月份的英文缩写转换成对应的数字
\]
\[年:不用变化
\]
\[最终组织成「年-月-日」的形式即可。
\]

代码如下。

源码(Java)

class Solution {
public String reformatDate(String date) {
String[] months = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"};
Map<String, Integer> s2month = new HashMap<String, Integer>();
for (int i = 1; i <= 12; i++) {//代码风格更不错一点
s2month.put(months[i - 1], i);
}
String[] array = date.split(" ");
int year = Integer.parseInt(array[2]);
int month = s2month.get(array[1]);
int day = Integer.parseInt(array[0].substring(0, array[0].length() - 2));// Integer.parseInt
return String.format("%d-%02d-%02d", year, month, day);//String.format("%d-%02d-%02d", ...) 格式化更彻底/更简约,省掉了 StringBuilder
}
}

Y 相关知识

HashMap/Hashtable *

此数据结构的【查询性能极佳】、【适用于k-v查询】: O(1)
本算法中,用于查询 月份(key) 的阿拉伯数字(value)

Java的格式化API *

格式化输出类:
NumberFormat
DecimalFormat
Dateformat
String.format 日期类:

Java的String类API

String
substring
indexOf
charAt
length()
... StringBuilder StringBuffer

X 参考文献

[Java/LeetCode]算法练习:转变日期格式(1507/simple)的更多相关文章

  1. [Java/LeetCode]算法练习:二进制间距(868/simple)

    1 题目描述 题目来源: https://leetcode-cn.com/problems/binary-gap/ 给定一个正整数 n,找到并返回 n 的二进制表示中两个 相邻 1 之间的 最长距离 ...

  2. Java处理Excel中的日期格式

    Java处理Excel中的日期格式 2011-12-23 17:34:03|  分类: java |举报 |字号 订阅 下载LOFTER 我的照片书  |   在Excel中的日期格式,其数值为距离1 ...

  3. java工具类(五)之日期格式字符串与日期实现互转

    JAVA字符串转日期或日期转字符串 项目开发过程中需要实现日期格式的字符串与日期进行互转,并进行日期的加减操作. Demo如下: package weiming.lmapp.utils; import ...

  4. java导入excel时处理日期格式(已验证ok)

    在Excel中的日期格式,比如2009-12-24将其转化为数字格式时变成了40171,在用java处理的时候,读取的也将是40171.如果使用POI处理Excel中的日期类型的单元格时,如果仅仅是判 ...

  5. java 获取当前日期和特殊日期格式转换

     1.获取当前日期: package com.infomorrow.dao; import java.sql.Timestamp; import java.util.Calendar; import ...

  6. JAVA对象转换为JSON及日期格式转换处理

    1.JSON日期格式转换 默认JSON对DATE类型会转换成一个多属性对象, 而不是单独的一个字符串, 在某些应用处理上不是很方便,  可以利用JsonValueProcessor来实现日期的转换. ...

  7. Java与C#间json日期格式互转完美解决方案

    http://blog.csdn.net/wilsonke/article/details/24362851   作用一种简单方便的数据传输方案,JSON已经成为替代XML的事实标准.然而在JSON中 ...

  8. LeetCode算法题-Subdomain Visit Count(Java实现)

    这是悦乐书的第320次更新,第341篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第189题(顺位题号是811).像"discuss.leetcode.com& ...

  9. LeetCode算法题-Search in a Binary Search Tree(Java实现)

    这是悦乐书的第295次更新,第314篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第163题(顺位题号是700).给定一个二叉搜索树(BST)的和正整数val. 你需要在 ...

随机推荐

  1. 循环结构(Java)

    基本介绍 while循环语法 while(布尔表达式){循环内容} 只要布尔表达式为true,循环则会一直循环下去 我们大多数会让循环停止下来,我们需要一个让表达式失效的方式来结束循环 少部分需要循环 ...

  2. IO在指定目录建文件

    path= "d:\\Project\\log\\log.txt"; File file = new File(path); //创建文件目录 if(!file.getParent ...

  3. django生命周期流程以及无有名分组和反向解析 JsonResponse和form表单上传

    django的请求生命周期流程图 要求每个人必须会画,帮助你梳理django的大致流程 路由层 1. 路由匹配:urls.py 这个文件是django框架的总路由文件,意味着还有分路由文件,每个应用都 ...

  4. ARFoundation在2019.2之后无法打包的问题

    打包提示错误gradle无法完成打包.解决方案 转到首选项>外部工具> Android> Gradle ,然后将自定义Gradle设置为Gradle 5.6.4或更高版本.请参阅Gr ...

  5. 修改/编辑jar包

    替换或者导入jar包时,jar包被自动压缩,springboot规定嵌套的jar包不能在被压缩的情况下存储. 解决(本文以升级ojdbc包为例): 使用jar命令解压jar包,在压缩包外重新替换jar ...

  6. day2Java程序基础

    Java程序基础 Java程序基本结构 一个程序的基本单位是class,class是关键字 类名要求: 类名必须以英文字母开头,后接字母,数字和下划线的组合 习惯以大写字母开头 public除了修饰类 ...

  7. 漫谈Python魔术方法,见过的没见过的都在这里了

    漫谈Python魔术方法,见过的没见过的都在这里了 就说一下,不深入 假的一览 提到魔术方法,学过python都应该知道一些.至少你得会__init__吧. 在我之前写的博文中有很多都涉及魔术方法.比 ...

  8. 文件上传靶场 upload-labs搭建 Pass 1-4

    upload-labs是一个练习文件上传的靶场 我们需要先安装中间件和PHP,推荐使用小皮面板,如何安装使用见sqli-labs搭建前部分 upload-labs下载:https://gitcode. ...

  9. Android笔记--Application

    Application生命周期 在APP运行过程中有且仅有一个Application对象贯穿整个生命周期 Application全局变量 实例化: 声明全局变量:

  10. MySQL学习(六)timestamp & datetime 区别

    参考博客: https://cloud.tencent.com/developer/article/1407693 timestamp只使用datetime一半的存储空间,并且会根据时区变化,具有特殊 ...