给出一个长度为n
的字符串,您必须确定该字符串是否是回文,但是最多可以删除一个字符。
例如:“ aba”是回文。
“ abca”也是有效的,因为我们可以删除“ b”或“ c”以获得回文。
我已经看到许多采用以下方法的解决方案。
在分别将两个指针
left
和right
初始化为字符串的开始和结束字符的情况下,只要保持同步,递增left
和递减right
的过程就保持同步。left
和right
指向的两个字符相等。我们第一次遇到
left
和right
所指向的字符之间的不匹配,并说它们具体是索引i
和j
时,我们只是检查是否string[i..j-1]
或string[i+1..j]
是回文。
我很清楚这是为什么工作,但是令我困扰的是我们第一次看到不匹配时所采取的方法的方向。
假定我们不关心时间效率,而只关注正确性,那么我看不到是什么阻止了我们尝试删除string[0..i-1]
或string[j+1..n-1]
中的字符,并试图查看是否生成了整个字符串可以成为回文症吗?
更具体地说,如果我们采用第一种方法,并且发现string[i..j-1]
和string[i+1..j]
都不是回文,那么阻止我们回溯到我描述的第二种方法,并查看是否从{{1}中删除字符}或string[0..i-1]
会产生回文?
我们可以从数学上证明为什么这种方法无用或完全不正确吗?