#Codeforces 750 Div 2
C:
- 思路:分开考虑26种方案的答案取 min即可 首先单独考虑每一种方案的时候 用双指针来分别 从 原字符串的左端和
- 右端向中间 逼近 当遇到两个相同的位置 说明是匹配的不需要操作 $l$和$r$重合的时候说明 全部字符串已经匹配完成
- 其次 在碰到不能匹配的位置的时候 一定是只能有一个可能是 当前可以删除的字符c 那么只需要越过该字符看下一个即可
- 这样依次配对 直到全部匹配完成
/*
当你觉得自己不行的时候 你就走到斑马线上 这样你就会成为一个行人
没关系 大不了我们大器晚成而已
Noe
int check(string &s,char c)
{
int l=0,r=s.length-1;
int res=0;
while(l<r)
{
if(s[l]==s[r]){l++;res++;continue};//每次成功匹配完成后 左指针向右移动一一格 右指针向左移动一格
if(s[l]!=s[r]&&s[l]==c){l++;res++;continue};//假如当前位置无法完成匹配且左指针指向的位置是可删除字符则左指针向右移动一格
if(s[l]!=s[r]&&s[r]==c){r--,res++;continue};//假如当前位置无法完成匹配且右指针指向的位置是可删除的字符则右指针向左移动一格
return 1e6;//如果还未扫完全部字符而 提前出现无法匹配的位置 且无字符可删去 说明 仅删除当前种字符无法使字符串成为回文字符串
}
return res;// 如果能够形成回文字符串res存下 了在形成回文串最少需要删除的该字符个数
}
void solve()
{
int ans = 1e6;
int n;cin>>n;
string s;cin>>s;
for(char c = 'a'; c <= 'z'; c++)//遍历26种方案
ans = min(ans, check(s, c));
cout<<(ans==1e6 ? -1 : ans) << '\n';
}*/
支持每一个打cf的uu!!