2026-08-16分数验证器。用go语言初始时分数和计数都为 0。按从左到右的顺序处理事件列表如果当前项是数字字符串“0”“1”“2”“3”“4”或“6”就把对应数字加到分数上如果是“W”只把计数加 1分数不变如果是“WD”或“NB”只把分数加 1计数不变。每处理完一项后检查如果已经处理到列表末尾或者计数已经达到 10就立即停止不再处理后续内容。最后返回两个整数依次表示最终分数和最终计数。1 events.length 1000。events[i] 是 “0”、“1”、“2”、“3”、“4”、“6”、“W”、“WD” 或 “NB” 之一。输入 events [“1”,“4”,“W”,“6”,“WD”]。输出 [12,1]。解释事件得分计数器“1”10“4”50“W”51“6”111“WD”121最终结果[12, 1]。题目来自力扣3921。处理过程详述初始化状态一开始总得分score为 0计数器counter为 0。这两个变量用来记录当前累计的结果。从左到右逐个处理事件程序会按顺序读取events数组中的每一个字符串元素对每个元素执行相应的操作。判断当前事件类型并更新状态对于当前事件字符串有三种可能的情况当前事件是W表示一次计分前的“警告”或“宽球”事件。此时只把计数器counter加 1总得分score保持不变。加完后会立即检查如果counter已经等于 10就马上停止处理不再继续看后面的任何事件。当前事件长度大于 1即WD或NB这两种事件都表示额外加 1 分。此时只把总得分score加 1计数器counter保持不变。因为计数器没有变化所以不可能在这一步达到 10也就不需要额外检查停止条件。当前事件是单个数字字符即0、1、2、3、4、6之一表示正常得分事件。此时把该数字字符转换成对应的整数值加到总得分score上。计数器counter保持不变。循环继续或提前结束如果当前事件是W且计数器达到 10循环会提前结束。否则继续处理下一个事件直到所有事件都处理完。返回最终结果循环结束后把最终的score和counter组合成一个长度为 2 的整数数组返回第一个元素是总得分第二个元素是计数器值。示例走查以输入events [1,4,W,6,WD]为例初始score 0counter 0处理1数字 1score 0 1 1处理4数字 4score 1 4 5处理W计数器加 1counter 1未达到 10继续处理6数字 6score 5 6 11处理WD长度大于 1score 11 1 12所有事件处理完毕返回[12, 1]复杂度分析时间复杂度最坏情况下需要遍历整个events数组一次。每个事件只进行常数次判断和简单加法操作因此总时间复杂度为 O(n)其中 n 是events的长度。额外空间复杂度整个过程中只使用了两个整数变量score和counter以及最终返回的固定长度数组。这些空间都不随输入规模增长所以额外空间复杂度为 O(1)。Go完整代码如下packagemainimport(fmt)funcscoreValidator(events[]string)[]int{score,counter:0,0for_,s:rangeevents{ifsW{counterifcounter10{break}}elseiflen(s)1{// WD NBscore}else{// 数字scoreint(s[0]-0)}}return[]int{score,counter}}funcmain(){events:[]string{1,4,W,6,WD}result:scoreValidator(events)fmt.Println(result)}Python完整代码如下# -*-coding:utf-8-*-defscore_validator(events):score0counter0forsinevents:ifsW:counter1ifcounter10:breakeliflen(s)1:# WD 或 NBscore1else:# 单个数字字符串scoreint(s)return[score,counter]if__name____main__:events[1,4,W,6,WD]resultscore_validator(events)print(result)C完整代码如下#includeiostream#includevector#includestringstd::vectorintscoreValidator(conststd::vectorstd::stringevents){intscore0;intcounter0;for(conststd::strings:events){if(sW){counter;if(counter10){break;}}elseif(s.length()1){// WD 或 NBscore;}else{// 单个数字字符scores[0]-0;}}return{score,counter};}intmain(){std::vectorstd::stringevents{1,4,W,6,WD};std::vectorintresultscoreValidator(events);std::cout[result[0], result[1]]std::endl;return0;}