专栏文章

题解:AT_abc433_c [ABC433C] 1122 Substring 2

AT_abc433_c题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@min1h5ke
此快照首次捕获于
2025/12/01 19:01
3 个月前
此快照最后确认于
2025/12/01 19:01
3 个月前
查看原文

思路

根据题目要求序列的定义,要找一个满足要求的序列,需要找到一个 0i<S10 \le i < |S|-1 使得 Si=Si+11S_i=S_{i+1}-1,只有这样的 ii 才能产生满足要求的序列。接着不断向外扩展序列的左右端点,根据定义,如果新的左端点和右端点一直和最初的左端点和右端点相等,每延长一次就有一个新的序列。
例如,输入字符串为111222,可找到 i=2i=2,不断向外扩展,有12 1122 111222三个序列。

代码

循环 ii00S2|S|-2,如果 ii 满足条件,就进入内层扩展循环,ii 就可以充当子序列的右端点,因为在右端点扫过的区间值全部相等,不可能成为合法的 ii
在内层扩展完毕后,ii 指向第一个不满足条件的元素,需要减 22,第一次退回最后一个满足条件的元素,由于它可能是合法的 ii,因此需要再减一次,让外层循环将 ii 加一,读者自证不难。
时间复杂度为 O(S)O(|S|)

评论

0 条评论,欢迎与作者交流。

正在加载评论...