题目要求在原始字符串 s 中,通过修改字母,使得某处出现一个连续的子串恰好等于固定的安全验证码 "AcMer",并且总修改代价最小。修改代价分为两类:
a 改成 A 或 A 改成 a),每次花费 6;由于目标串 "AcMer" 长度只有 5,而原串 s 长度 n 满足 5≤n≤2×105,因此可以采用线性扫描的方法:
小蓝正在编辑一份文本,他希望其中出现一个特定的安全验证码 “AcMer”(不含引号,需严格匹配大小写)。为了保证文本能通过验证,他可以对文本中的字母进行修改,每次修改的代价如下:
现在给出一段长度为 n 的文本字符串(仅由大小写英文字母组成),请你计算至少需要进行多少花费的修改,才能使字符串中某处出现一段连续的子串恰好为 “AcMer”。
字符串的长度 n 满足 5≤n≤2×105,字符串中仅包含大小写英文字母。
输入共一行,包含一个由大小写英文字母组成的字符串 s,长度在 5 到 2×105 之间。
输出一个整数,表示最小花费。
输入
AcMer
输出
0
说明
字符串本身即为目标串 "AcMer",长度为 5,无需任何修改,最小花费为 0。
输入
AAAAA
输出
23
说明
字符串长度为 5,仅有一子串。将其修改为 "AcMer" 的代价如下:
1 个字符 'A' 与目标 'A' 完全相同,花费 0;2 个字符 'A' 与目标 'c' 不同,且 'A' 为大写、'c' 为小写,大小写不同,花费 6;3 个字符 'A' 与目标 'M' 不同,但均为大写,大小写相同,花费 5;4 个字符 'A' 与目标 'e' 大小写不同,花费 6;5 个字符 'A' 与目标 'r' 大小写不同,花费 6。
总代价 0+6+5+6+6=23,最小花费为 23。输入
abcdeAcMerxyz
输出
0
说明
字符串中包含子串 "AcMer"(从第 6 个字符开始),这一段已经与目标完全匹配,修改代价为 0。因此最小花费为 0。
输入
BcNer
输出
10
说明
字符串长度为 5,仅有一子串。修改为 "AcMer" 的代价:
'B' 变为 'A':两个字符不同但均为大写,大小写相同,花费 5;'c' 与目标 'c' 相同,花费 0;'N' 变为 'M':均为大写,大小写相同,花费 5;'e' 与目标 'e' 相同,花费 0;'r' 与目标 'r' 相同,花费 0。
总代价 5+0+5+0+0=10,最小花费为 10。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.