P16291 [蓝桥杯 2026 省 Java A 组] 连续打卡
题目描述
小明是一个自律的程序员,他每天都在使用一款学习打卡 APP 记录自己的学习情况。APP 会记录他每次打卡的日期,现在小明想要统计自己的最长连续打卡天数。
连续打卡是指在连续的若干天内每天都有打卡记录。例如,如果小明在 2026-01-01、2026-01-02、2026-01-03 都有打卡,那么这就是连续 $3$ 天打卡。
给定小明的打卡记录(若干个日期),请帮他计算最长连续打卡天数。
注意:若所有打卡日期互不相邻,则最长连续打卡天数为 $1$;即单独一天也视为连续 $1$ 天。
注意:打卡记录可能有重复(同一天多次打卡),同一天多次打卡只算一天。
输入格式
第一行包含一个整数 $N$,表示打卡记录的数量。
接下来 $N$ 行,每行包含一个日期,格式为 YYYY-MM-DD(年 -月 -日)。
输出格式
输出一个整数,表示最长连续打卡天数。
说明/提示
### 【样例说明 1】
小明的打卡日期去重后为:2026-01-01、2026-01-02、2026-01-03、2026-01-05、2026-01-06、2026-01-10。
其中:
- 2026-01-01 至 2026-01-03 是连续的 $3$ 天;
- 2026-01-05 至 2026-01-06 是连续的 $2$ 天;
- 2026-01-10 是单独的 $1$ 天。
因此最长连续打卡天数为 $3$ 天。
### 【样例说明 2】
这 $5$ 天是跨年的连续日期,从 2025 年 12 月 30 日到 2026 年 1 月 3 日,共 $5$ 天连续打卡。
### 【评测用例规模与约定】
对于所有评测用例:
- $1 \le N \le 100000$;
- 日期范围:2000-01-01 至 2099-12-31;
- 保证所有日期都是有效的日期(考虑闰年);
- 日期可能乱序给出,也可能有重复。
| 测试用例占比 | 数据规模 |
|:------------:|:---------------:|
| 30% | $1 \le N \le 100$ |
| 60% | $1 \le N \le 10000$ |
| 100% | $1 \le N \le 100000$ |