操作并不是对字符串中的“区间位置”生效,而是对字母表中的一个字母区间生效(如 [a,c]
),把所有出现的这些字母统一大小写转换。
因此,我们不需要一遍遍扫描字符串;只要记录每个字母最近一次被“转成大写”的操作时间与最近一次被“转成小写”的操作时间即可。
设:
last_up[c]
:字母 c
(0~25)最近一次被“转大写”的操作编号(没有则为 0)last_low[c]
:字母 c
最近一次被“转小写”的操作编号(没有则为 0)读入每个操作 [letter1, letter2]
(保证 letter1 <= letter2
),把这个闭区间内对应字母的 last_up
或 last_low
更新为该操作的编号 i
。
小美有一个长度为n,仅由大小写英文字母组成的字符串s。小美将对字符串执行以下m次操作:
当操作类型op=1且给定两个小写字母letter1,letter2(满足letter1≦letter2)时,将字符串中所有位于字母表中[letter1,letter2]的小写字母转换为对应的大写字母;
当操作类型op=2且给定两个大写字母letter1,letter2(满足letter1≦letter2)时,将字符串中所有位于字母表中[letter1,letter2]的大写字母转换为对应的小写字母。