HihoCoder - 1721-回文字符串2
思路:
从外往内找(从内往外找是不行的)
每次判断最外面的两个字符是否相同
如果不相同记录一下这两个点,如果没有找到,直接输出最中间的点
然后判断究竟是删除左边点还是右边点 符合题意
但是题目要求是最小的
所以要从都要往前找一找是否有和要删除元素相同的元素(与删除元素的中间不会有其他元素)
#include<bits/stdc++.h> using namespace std; const int maxn=500000+100; char s[maxn]; int main() { scanf("%s",&s); int len=strlen(s); int res=len/2; int i=0,j=len-1; while(i<j) { if(s[i]!=s[j]) break; i++,j--; } //printf("%d %d ",i,j); if(i==j-1) { for(int k=i-1; k>=0; k--) { res=k; if(s[k]!=s[i]) { res=k+1; break; } } printf("%d ",res+1); } else if(i>=j) { for(int k=i-1; k>=0; k--) { res=k; if(s[k]!=s[i]) { res=k+1; break; } } printf("%d ",res+1); } else if(s[i+1]==s[j]) { for(int k=i-1; k>=0; k--) { res=k; if(s[k]!=s[i]) { res=k+1; break; } } printf("%d ",res+1); } else if(s[i]==s[j-1]) { for(int k=i-1; k>=0; k--) { res=k; if(s[k]!=s[i]) { res=k+1; break; } } printf("%d ",res+1); } }