Related
In following contests:
令 dp[i] 表示把前缀 s[0..i−1](长度为 i)切成同端片段的最多段数;若无法切分则为 −1。空前缀 dp[0]=0。
对每个字符 c,记录一个二元组 (MAX[c],index[c]):在以往某个位置 index 处,字符恰好为 c,且当时前缀 s[0..index−1] 的最优段数为 MAX。
从左到右扫描,处理第 i 个字符 s[i−1] 时:
2),于是 dp[i]=dp[index]+1。给定一个仅含小写字母的字符串 s。一次切割会把它分成若干连续非空片段,且这些片段按原顺序拼回必须恰好等于 s。称一个片段为同端片段,当且仅当它的长度至少为 2,并且它的首字符与尾字符相同。
请把 s 切成尽可能多的同端片段。若无论如何都无法把整个字符串切成同端片段(包括不切割但 s 本身也不是同端片段的情况),则答案为 −1。
In following contests:
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.