Mihahim has a string s. He wants to delete exactly one character from it so that the resulting string would be a palindrome. Determine if he can do it, and if he can, what character should be deleted.
The input contains a string s of length (2 ≤ |s| ≤ 200000), consisting of lowercase Latin letters.
If the solution exists, output «YES» (without quotes) in the first line. Then in the second line output a single integer x — the number of the character that should be removed from s so that the resulting string would be a palindrome. The characters in the string are numbered from 1. If there are several possible solutions, output any of them.
If the solution doesn't exist, output «NO» (without quotes).
evertree
YES
2
emerald
NO
aa
YES
2
从左右两边往中间移动,如果相同,l++,r--,如果不同,第一次循环i==0时,则让l++,第二次循环则让r--,最后判断不同的出现了几次。如果dif是0,l>=r代表本身就是回文,则去掉l位置的字符。
#include <cstring> #include <cstdio> #define N 100005 char s[N<<1]; int len,l,r,dif,at; int main() { scanf("%s",s); len=strlen(s); for(int i=0;i<2;i++){ dif=0; l=0,r=len-1; while(l<r){ if(s[l]!=s[r]){ dif++; if(i){ at=r; r--; }else { at=l; l++; } } if(s[l]==s[r]){ l++; r--; } } if(l>=r&&dif==0)at=l; if(dif<2){ printf("YES %d ",at+1); break; } } if(dif>1)puts("NO"); }