理解光标与已提交前缀的关系
字符串 s 的下标从 1 到 n。用 t 表示每个字符是否已提交,ti=1 表示已提交,0 表示未提交。
已提交部分必然是 s 的一个前缀,设当前前缀长度为 k(即前 k 个字符已提交)。每次操作将光标左移或右移一个位置,对应将 k 减少 1 或增加 1。
因此,问题转化为:通过最少次数的 k±1 操作,调整 k 的值,使得 s 的未提交后缀(s[k+1…n])中,字母 a 到 z 的出现次数分别等于给定的 c1,c2,…,c26。
确定唯一可行的前缀长度
未提交后缀的长度为 n−k。该后缀需要包含的总字符数等于目标要求的总和:
小蓝有一个长度为 n 的字符串 s,仅由小写字母组成。她正在按顺序提交这些字符,并用另一个长度相同的字符串 t 记录每个字符是否已提交:ti=1 表示第 i 个字符已经提交,ti=0 表示尚未提交。保证所有已提交的字符构成 s 的一个前缀(即 t 中所有的 1 都在 0 之前)。
小蓝可以执行操作:每次将光标向左或向右移动一个字符的位置。移动光标会改变已提交前缀的长度。她的目标是通过若干次操作,使得 s 中未提交的后缀部分中,字母 a 到 z 的出现次数分别等于给定的 26 个整数 c1,c2,…,c26。未提交部分可以为空串。
请求出最少需要执行多少次操作。题目保证至少存在一种方案可以达成目标。
约束:
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册