AlgoMooc
你已开通华为OD训练营权益,还差最后一步——完成入营激活(兑换课程 + 加飞书 + 登记服务群),即可解锁全部课程与专属服务。去激活 →
← 返回题库

P3200. 完美走位

困难通过率 51% · 提交 637 · 通过 327
滑动窗口哈希表字符串不定滑窗

小慕正在开发一款第一人称射击游戏的角色移动系统。玩家通过键盘上的 `A`、`S`、`D`、`W` 四个按键控制角色分别向左、向后、向右、向前移动一步,从而完成走位。 小慕发现,如果玩家按动一定次数的键盘后,各个方向的移动步数恰好相等,那么角色必定会回到原点,小慕将这种走位称为。 现在小慕拿到了一段玩家的走位记录(例如:`ASDA`),他希望通过替换其中一段(可以替换成任意相同长度的走位),使得整段走位变成一个完美走位。 请你帮小慕计算出待替换的连续走位的最小可能长度。如果原走位本身已经是完美走位,则返回 `0`。 备注 1. 走位长度 1 ≤ s.length ≤ 10^5 2. s.length 是 4 的倍数 3. s 中只含有 A、S、D、W

提示:带虚线的词点一下有通俗解释。

输入描述

<div data-page-id="OAMMdvCuDocxiZxW5vvcJztgnAe" data-docx-has-block-data="false"> <div style="white-space-collapse:preserve;" class="ace-line ace-line old-record-id-Iek2dTr52oIaGSxlCMlcNImKnDb">输入为由键盘字母表示的走位<code>s</code>,例如:<code>ASDA</code> </div> </div> <span data-lark-record-data="{"rootId":"OAMMdvCuDocxiZxW5vvcJztgnAe","text":{"initialAttributedTexts":{"text":{"0":"输入为由键盘字母表示的走位s,例如:ASDA"},"attribs":{"0":"*0+d*0*1+1*0+4*0*1+4"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"],"1":["inlineCode","true"]},"nextNum":2}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":9,"type":"text","selection":{"start":0,"end":22},"recordId":"Iek2dTr52oIaGSxlCMlcNImKnDb"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

输出描述

<div data-page-id="OAMMdvCuDocxiZxW5vvcJztgnAe" data-docx-has-block-data="false"> <div style="white-space-collapse:preserve;" class="ace-line ace-line old-record-id-KfFddI2yaoRAZcxyxACcarixnff">输出为待更换的连续走位的最小可能长度 </div> </div> <span data-lark-record-data="{"rootId":"OAMMdvCuDocxiZxW5vvcJztgnAe","text":{"initialAttributedTexts":{"text":{"0":"输出为待更换的连续走位的最小可能长度"},"attribs":{"0":"*0+i"}},"apool":{"numToAttrib":{"0":["author","7115054903550050305"]},"nextNum":1}},"type":"text","referenceRecordMap":{},"extra":{"mention_page_title":{},"external_mention_url":{}},"isKeepQuoteContainer":false,"isFromCode":false,"selection":[{"id":11,"type":"text","selection":{"start":0,"end":18},"recordId":"KfFddI2yaoRAZcxyxACcarixnff"}],"payloadMap":{},"isCut":false}" data-lark-record-format="docx/text" class="lark-record-clipboard"></span>

示例

示例 1

输入

AASW

输出

1

说明:需要把一个 A 更换成 D,这样可以得到 ADSW 或者 DASW。

示例 2

输入

ASDW

输出

0

说明:已经是完美走位了。

示例 3

输入

AAAA

输出

3

说明:可以替换后 3 个 A,得到 ASDW。

示例 4

输入

AAAAADDD

输出

4

时间限制 1000 ms · 内存限制 128 MB

看不懂题目?点开图解
不定滑窗:双机位A/B/C-完美走位 原走位: A A A A 滑窗:后3个A(待更换) 替换后: A D S W 替换长度为3,使得四个方向各出现1次,成为完美走位 统计:A:4, S:0, D:0, W:0 → 需平衡,滑窗内可任意替换
写完代码点「提交」,将对全部测试用例判题。

向老师提问

针对「完美走位」把疑问、代码和报错填清楚,老师收到后能更快、更准地回复你。