Leetcode 458 补题
Leetcode 458
用特殊操作处理字符串 II


对于给定的数据范围显然不能暴力求解,考虑反向处理操作序列。记录最终的字符串长度,倒序遍历操作序列,如果k(从0开始)大于等于字符串长度那么越界无解。
- 当操作是删除时,递归处理前n-1个操作,同时字符串长度加一,因为k在前面,删除末尾字符不会影响到前面,即使后面的操作可能会反转,但因为是递归处理所以k的位置早已变化;
- 当操作是反转时,改变k为对称位置,再递归处理前n-1个操作;
- 当操作是复制时,如果k在右半边,那么就移动到左半边,再递归处理前n-1个操作;
- 如果是字符,且此时k等于字符串长度-1(偏移),说明找到了答案,反之递归处理前n-1个操作;
1 |
|
图中的最长回文路径


直接爆搜显然是不行的,回文串的做法就几种,考虑使用中心扩展法优化,枚举回文中心,这样就只需往两边找相同的字符。
由于节点个数较少因此可以使用状态压缩记录操作过的节点,定义dp(x,y,s)为左右端点为x,y的回文串,s记录已选过的节点,去枚举x,y的相邻节点做状态转移
1 |
|
Leetcode 458 补题
http://example.com/2025/07/13/Leetcode 458/