问题转化
字符串 S 的所有非空子串,若其 首现序列 严格递增,则称为优雅子串。
首现序列是指:从左向右扫描子串,保留每种字符第一次出现的位置,按原顺序拼接得到的字符串。严格递增意味着序列中后一个字符在字母表中的顺序大于前一个字符。
核心观察
对于一个左端点 left,我们希望找到最大的右端点 limit,使得所有以 left 开头、右端点 r ≤ limit 的子串 S[left..r] 都是优雅的。
当右端点逐渐向右扩展时,新字符的加入可能会破坏首现序列的递增性。若某个字符在更靠右的位置首次出现,且它的字母序小于等于已出现的某个字符,则不再满足严格递增。
给定一个长度为 n 的字符串 S,仅由小写字母构成。
对于任意字符串 T,定义其 首现序列 为:从左向右扫描 T,保留每种字符第一次出现的位置,按原顺序拼接得到的字符串。例如 T=aabca 的首现序列为 abc。
若一个字符串 T 的首现序列是严格递增的(即序列中后一个字符在字母表中严格大于前一个字符),则称 T 是 优雅的。
字符串 S 的子串是指 S 中连续的一段字符构成的字符串。请你计算 S 的所有非空子串中,优雅子串的总个数。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.