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);
}
}
