![题解:P14730 [ICPC 2022 Seoul R] Palindrome Type](https://image.rusin7.com/file/hexo/cover/kuKbfhkc.webp)


总体分析#
核心:修改字符串 使其成为回文串,记最小次数为 ,如果 ,输出 ,否则输出 -1 。
因此,可以从 依次进行 DFS 搜索,只要有一次成功,输出 ,结束。
思路引导#
{% note warning flat %} 提问 如何 DFS 搜索修改过程算出 ? {% endnote %}
{% note success flat %} DFS 函数 使用 双指针 ↗。
当 时:
- 如果左指针 和右指针 对应的 ,那么这部分已经是回文的, 向右移, 向左移。
- 否则:
- 如果剩余次数 ,无法继续修改,返回无法完成。
- 如果删除 或 可完成,返回可以完成。
- 否则返回无法完成。
返回无法完成。 {% endnote %}
{% note error flat %}
警告
如果 都不可以,最后输出 -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