【队内赛T1】【贪心】日常

队内赛T1 日常


题目

在这里插入图片描述
输入输出样例
输入 #1

10
aabdbaddca

输出 #1

3

大样例
example2.zip
在这里插入图片描述


解题思路

关于,第三个子任务的意义是什么??

贪心
奇迹以第 i 个点为结尾, 奇迹最大长度

l 为以 i 为结尾,奇迹的最左端
比如 abadb 的最左端为 1,1,2,2,3;奇迹长度为1,2,2,3,3
奇迹的长度为 i - l + 1

用一个桶记录字母上次出现的位置
每次加入 i 时,看一下当前的奇迹有没有包含位置 i 的字母,如果有就更新最左端


Code

#include<bits/stdc++.h>

using namespace std;

char s[300100];  //反正任务3没分,就不想搞字母输入了
int n, ans, l, now, a[30];

int main() {
	scanf("%d", &n);
	scanf("%s", s + 1);
	l = 1;
	for(int i = 1; i <= n; i ++) {
		int now = s[i] - 'a' + 1;
		if(l <= a[now]) l = a[now] + 1;  //更新最左端
		a[now] = i;  //更新字母的位置
		ans = max(ans, i - l + 1);
	}
	printf("%d", ans);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值