原题
题意
给出一串字符串,要求判断在删去两个字符后,是否构成回文
思路
1.若字符串为回文,则删除头尾
2.若删除1个字符为回文,则不管此时字符串为奇数或偶数,删除中间的字符亦为回文
//纯暴力也可
AC代码
#include<bits/stdc++.h>
using namespace std ;
int n , t ;
string str ;
bool dfs( int l , int r , int cnt )
{
if( l >= r )
return 1 ;
else
{
if( str[l] != str[r] )
{
if( cnt == 0 ) return 0 ;
if( cnt > 1 ) return dfs( l + 1 , r , cnt - 1 ) || dfs( l , r - 1 , cnt - 1) || dfs( l + 1 , r - 1 , cnt - 2 ) ;
if( cnt > 0 ) return dfs( l + 1 , r , cnt - 1 ) || dfs( l , r - 1 , cnt - 1 ) ;
return 0 ;
}
else
return dfs( l + 1 , r - 1 , cnt ) ;
}
}
int main()
{
cin >> t ;
while( t -- )
{
cin >> n >> str ;
if( dfs( 0 , n - 1 , 2 ) )
cout << "YES" << endl ;
else
cout << "NO" << endl ;
}
return 0 ;
}