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

经验分享 程序员 微信小程序 职场和发展