当前位置: 首页 > news >正文

拼多多笔试真题-平衡队伍(C++/Py/Java /Js/Go)

平衡队伍

拼多多技术岗 8月2号笔试 第一题

题目内容

某体育俱乐部的nnn名队员排成一列,每名队员的类型用字符串中的字符表示:‘AAA’或’BBB’。教练想要选出一个连续的区间组成队伍。若区间内 ‘AAA’ 类队员数与 ‘BBB’ 类队员数相等,则称该队伍为“平衡队伍”。请找出平衡队伍的最大人数。

输入描述

111行:一个整数nnn(1≤n≤2×105)(1 \le n \le 2\times10^5)(1n2×105)
222行:一个长度为nnn的字符串sss,仅包含字符 ‘AAA’ 和 ‘BBB

输出描述

一个整数,表示平衡队伍的最大人数。若不存在平衡队伍,输出000

样例1

输入

4 ABAB

输出

4

说明
整个字符串有222个 ‘AAA’ 和222个 ‘BBB’,满足平衡条件,最大长度为444

样例2

输入

3 AAA

输出

0

说明
无法选出平衡队伍,输出000

样例3

输入

5 AAABB

输出

4

说明
AABBAABBAABB” 子串(第222555位)有222个 ‘AAA’ 和222个 ‘BBB’,长度为444,是最大的平衡队伍。

题解和思路

思路

实现思路:前缀和

  1. 可以将A看作-1,B看作1,从前往后进行累加。利用前缀和特性可以得出当prefix[i] == prefix[j]时说明[i+1, j]中1的数量和-1数量相同,就是题目所描述的均衡情况。
  2. 为了求出尽可能长度,当前位置 i 前缀和sum情况下肯定是选取尽量靠前的前缀和也为sum的位置,所以只需要使用哈希表记录各个前缀和首次出现位置。
  3. 按照1、2分析,从前往后累加前缀和sum, 将首次出现前缀和位置记录在哈希表中,遍历到i时,前缀和sum在哈希表中已经存在记录时,尝试更新最长均衡长度maxLen = max(maxLen, i - mp[sum])
  4. 算法平均时间复杂度为O(n)

C++

#include<bits/stdc++.h>usingnamespacestd;intmain(){ios::sync_with_stdio(false);cin.tie(nullptr);intn;string s;cin>>n;cin>>s;intmaxLen=0;intsum=0;// 记录前缀和首次出现位置unordered_map<int,int>mp;mp[0]=-1;for(inti=0;i<n;i++){sum+=(s[i]=='A'?-1:1);// 两个相同前缀和之间一定平衡if(mp.count(sum)){maxLen=max(maxLen,i-mp[sum]);// 记录sum首次出现位置}else{mp[sum]=i;}}cout<<maxLen;}

Java

importjava.io.*;importjava.util.*;publicclassMain{publicstaticvoidmain(String[]args)throwsException{BufferedReaderbr=newBufferedReader(newInputStreamReader(System.in));intn=Integer.parseInt(br.readLine());Strings=br.readLine();intmaxLen=0;intsum=0;// 记录前缀和首次出现位置HashMap<Integer,Integer>mp=newHashMap<>();mp.put(0,-1);for(inti=0;i<n;i++){sum+=(s.charAt(i)=='A'?-1:1);// 两个相同前缀和之间一定平衡if(mp.containsKey(sum)){maxLen=Math.max(maxLen,i-mp.get(sum));// 记录sum首次出现位置}else{mp.put(sum,i);}}System.out.print(maxLen);}}

python

importsys n=int(sys.stdin.readline())s=sys.stdin.readline().strip()maxLen=0sum=0# 记录前缀和首次出现位置mp={}mp[0]=-1foriinrange(n):sum+=-1ifs[i]=='A'else1# 两个相同前缀和之间一定平衡ifsuminmp:maxLen=max(maxLen,i-mp[sum])# 记录sum首次出现位置else:mp[sum]=iprint(maxLen)

Javascript

constreadline=require("readline");constrl=readline.createInterface({input:process.stdin,output:process.stdout});letinput=[];rl.on("line",line=>{input.push(line.trim());});rl.on("close",()=>{letn=Number(input[0]);lets=input[1];letmaxLen=0;letsum=0;// 记录前缀和首次出现位置letmp=newMap();mp.set(0,-1);for(leti=0;i<n;i++){sum+=(s[i]==='A'?-1:1);// 两个相同前缀和之间一定平衡if(mp.has(sum)){maxLen=Math.max(maxLen,i-mp.get(sum));// 记录sum首次出现位置}else{mp.set(sum,i);}}console.log(maxLen);});

Go

packagemainimport("bufio""fmt""os")funcmain(){in:=bufio.NewReader(os.Stdin)varnintvarsstringfmt.Fscan(in,&n)fmt.Fscan(in,&s)maxLen:=0sum:=0// 记录前缀和首次出现位置mp:=make(map[int]int)mp[0]=-1fori:=0;i<n;i++{ifs[i]=='A'{sum--}else{sum++}// 两个相同前缀和之间一定平衡ifpos,ok:=mp[sum];ok{ifi-pos>maxLen{maxLen=i-pos}// 记录sum首次出现位置}else{mp[sum]=i}}out:=bufio.NewWriter(os.Stdout)deferout.Flush()fmt.Fprint(out,maxLen)}
http://www.cnnetsun.cn/news/3847538.html

相关文章:

  • ComfyUI自定义节点开发:本地部署MiniMax H3模型实现智能提示词增强
  • 笔记本显卡驱动缺失症状与2026年修复全指南
  • Desktop Postflop:从直觉玩家到理论高手的免费GTO求解器
  • 如何用3分钟找出占用你Windows快捷键的“元凶“:Hotkey Detective深度解析
  • 从零开始学习 Zustand:React 状态管理利器详解与实战
  • 终极指南:3步免费升级老旧Mac到最新macOS
  • 拯救者笔记本性能调校指南:Lenovo Legion Toolkit完整教程
  • STM32F103C8T6与OLED实现嵌入式实时曲线绘制全解析
  • 基于Hadoop+Spark+Hive的地震预测大数据系统设计与实现
  • SMUDebugTool终极指南:7个简单技巧解决AMD Ryzen系统调试难题
  • 三星 HDR10 Plus Advanced 规格 2 本月全球上线,与杜比视界 2 谁能更胜一筹?
  • 从零到一:KLayout开源版图设计工具完整指南
  • 利用AI语音转写与精听训练,高效提升英语新闻听力
  • 闲鱼防关联系统:多线程不抢焦,告别网页卡死报错
  • ML.NET 踩坑实录:从 Demo 到生产的 8 类工程化陷阱
  • 微信聊天记录永久保存指南:让你的数字记忆不再消失
  • LRCGET:为什么这款工具能让你的离线音乐库歌词管理效率提升5倍?
  • Windows 11亮度滑块消失?从驱动到注册表的完整修复指南
  • SQL Server连接MySQL实战:ODBC驱动配置与跨库查询更新指南
  • 抖音批量下载器:从手动操作到自动化采集的技术革命
  • Linux chattr 命令详解|文件扩展属性与系统安全加固实战指南
  • 5GNR UE开机到时间同步的全过程
  • 工业自动化职业选择:机器视觉与PLC技能栈构建指南
  • 3步掌握BlenderKit:免费3D资产库终极使用指南
  • 跨平台鼠标连点器完全指南:3步实现高效自动化点击
  • 软总线-传输模块-多通道并行协商
  • Agentic架构下C#与Go的分层选型策略:从编排到执行的全栈实践
  • 从 list 到混合存储:1 亿个布尔标签的 5 次优化踩坑实录
  • 淘客APP分布式任务调度:海量商品更新的定时任务优化方案
  • SpringBoot+Vue3构建古典舞在线交流平台全栈实践