社区讨论

站外题求助大佬!

学术版参与者 4已保存回复 9

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
9 条
当前快照
1 份
快照标识符
@lo149arz
此快照首次捕获于
2023/10/22 14:57
2 年前
此快照最后确认于
2023/11/02 14:29
2 年前
查看原帖
悬关,感谢大佬!!!

等串(wait)

题目描述

若一个字符串中,所有出现的字符的数量相等,则称这个字符串为 wait 串。
给定仅含字符 l , r的字符串 s,你需要求出其中最长的 wait 串的长度。

输入格式

第一行一个整数 nn,表示 s 的长度。
第二行一个长度为 nn 的字符串 s

输出格式

输出仅一行,即 s 中最长的 wait 串的长度。

样例 #1

样例输入 #1
CPP
10
lllrrlrlll
样例输出 #1
CPP
6

本人的代码:

CPP
//85pts, 剩下15分都是WA
#include<bits/stdc++.h>
using namespace std;
long long sum[5000100];
unordered_map<long long,int> sum2;
long long n;
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n;
	for(int i = 1; i<=n; i++){
		char p;
		cin >> p;
		sum[i] = sum[i-1];
		if(p=='l'){
			sum[i]++;
		}else if(p=='r'){
			sum[i]--;
		}
		sum2[sum[i]] = -1;
	}
	sum2[0] = 0;
	long long ans = 0;
	for(int i = 1; i<=n; i++){
		//cout << ans << endl;
		//cout << sum[i] << " ";
		if(sum2[sum[i]]!=-1){
			sum2[sum[i]] = i;
		}else{
			ans = max(ans,i-sum2[sum[i]]);
		}
	}
	cout << ans;
	return 0;
}

回复

9 条回复,欢迎继续交流。

正在加载回复...