题解:CF1582C Grandma Capa Knits a Scarf

· · 题解

题意

给你一个包含 $n$ 个字符的字符串 $s$,你可以删除其中的一些字符,来使这个字符串回文。输出最少删除的字符个数。 ## 分析 众所周知,字符串只有 $26$ 个字符,我们完全可以暴力,然后双指针优化。如果说两个一样就跳过,因为这两个字符是回文的,否则我们就删除左指针指向的字符或者右指针指向的字符。当然,如果这两个指针指向的字符都不能被删去,那么这种方法就不行。 ## 代码 ```cpp #include<bits/stdc++.h> using namespace std; #define int long long const int INF=1e17+7; int t,n; string s; signed main() { cin>>t; while(t--){ cin>>n>>s; s=" "+s; int ans=INF; for(int i='a';i<='z';i++){ int l=1,r=n,flag=0,count=0; while(l<r){ if(s[l]!=s[r]){ if(s[l]==i){ l++; count++; }else if(s[r]==i){ r--; count++; }else{ flag=1; break; } }else{ l++; r--; } } if(!flag) ans=min(ans,count); } if(ans==INF) cout<<"-1"<<endl; else cout<<ans<<endl; } return 0; } ``````