如形の博客
题解:P14730 [ICPC 2022 Seoul R] Palindrome TypeBlur image

111

纯享阅读区
题目传送门

总体分析#

核心:修改字符串 ss 使其成为回文串,记最小次数为 kk,如果 k3k\leq3,输出 kk,否则输出 -1

因此,可以从 k=03k=0\sim3 依次进行 DFS 搜索,只要有一次成功,输出 kk,结束。

思路引导#

{% note warning flat %} 提问 如何 DFS 搜索修改过程算出 kk? {% endnote %}

{% note success flat %} DFS 函数 使用 双指针

l<rl<r 时:

  • 如果左指针 ll 和右指针 rr 对应的 sl=srs_l=s_r,那么这部分已经是回文的,ll 向右移,rr 向左移。
  • 否则:
    • 如果剩余次数 step=0step=0,无法继续修改,返回无法完成。
    • 如果删除 l+1l+1r+1r+1 可完成,返回可以完成。
    • 否则返回无法完成。

返回无法完成。 {% endnote %}

{% note error flat %} 警告 如果 k3k\leq 3 都不可以,最后输出 -1 。 {% endnote %}

核心代码#

bool dfs(int l, int r, int step){

    while(l<r){
        if(s[l]==s[r])l++,r--;
        else{
            if(!step)return 0;
            if(dfs(l+1,r,step-1)||dfs(l,r-1,step-1))return 1;
            return 0;
        }
    }
    return 1;

}
cpp
题解:P14730 [ICPC 2022 Seoul R] Palindrome Type
https://blog.rusin7.com/article/p14730-sol
Author 如形
Published at March 30, 2026
Comment seems to stuck. Try to refresh?✨