本题核心是字符串解析 + 日期合法性校验 + 去重 + 排序,属于模拟/字符串处理类题目,不涉及复杂算法,关键在于把规则严谨地落地,避免边界错误。
整体流程:
/ 按斜杠 yyyy/mm/dd 解析,否则含 - 按横杠 yyyy-mm-dd 解析;两者皆无(或混合)则视为非法,直接忽略。2021/02-20 拆不出 3 段),或某段含非数字字符,均判非法。1000~2100、月份 1~12、日不超过当月天数(平年 2 月 28 天,闰年 2 月 29 天)。闰年规则:能被 4 整除且不能被 100 整除,或能被 400 整除。在日常开发中,用户输入的日期格式五花八门。现需要你编写一个程序,能够识别多种日期格式,将其统一输出为 yyyy-mm-dd 格式,并按日期递增顺序排列。
输入为字符串数组:
| 字符串格式类型 | 示例 | 说明 |
|---|---|---|
| 斜杠分隔 | 2022/01/01、2022/1/1 | 月/日可能补零也可能不补零 |
| 横杠分隔 | 2022-01-01、2022-1-1 |
注意:
1000 ~ 21001 ~ 200 范围内,且单个字符串长度不超过 50,即单个字符串长度在 0 ~ 5012 日,二月平年有 28 天,闰年有 29 天等4 整除且不能被 100 整除,或者能被 400 整除都为闰年,否则都是平年按日期递增顺序输出字符串数组,每个日期字符串输出 yyyy-mm-dd 格式的日期。月份和日期不足两位补前导零。
若所有输入均非法,则输出仅包含一个元素且元素为 "NULL" 的字符串数组。
判断格式的优先级顺序(从高到低):
/,按 yyyy/mm/dd 解析-,按 yyyy-mm-dd 解析输入
["2022/01/01","2022-1-1","20220101","1640995200","2022/1/1","2022-01-01","2022-12-31","1641081600"]
输出
["2022-01-01","2022-12-31"]
说明
2022/01/01 为斜杠分隔,转成 2022-01-012022-1-1 为横杠分隔,但月/日需要补零,转成 2022-01-0120220101 非法1640995200 非法2022/1/1 为斜杠分隔,月/日需要补零,转成 2022-01-012022-01-01 满足条件2022-12-31 满足条件1641081600 非法2022-01-01、2022-12-31输入
["2021/02/29","2021/02-20"]
输出
["NULL"]
说明
2021/02/29 日期非法,2021 年 2 月没有 29 日2021/02-20 日期非法,斜杠和横杠混用不支持输入
["1970/1/1"]
输出
["1970-01-01"]
说明
1970/1/1 转格式后为 1970-01-01
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册