zoukankan      html  css  js  c++  java
  • [ACdream]女神教你字符串——违和感

    题目描述:

    女神最喜欢字符串了,字符串神马的最有爱了。

    女神是一个重度强迫症患者,面对不是对称的东西,她会觉得太违和了,就会爆炸。所以她手上的字符串都是回文的,像什么a,b,aabaa,abcba,上海自来水来自海上...等等。

    女神的人生理想就是把所有字符串都改造成回文串!这是非常宏伟的理想。

    一切理想都从最简单的开始。

    好了,现在女神面前有一堆字符串,然后请问能否通过删去一个字符,使这个字符串变成回文串?

    Input

    多组数据,每组数据是一个字符串S,仅有英文小写字母组成

    1<=|S|<=100000

    Output

    对于每组数据,若可以通过删除一个字符来变成回文串,则输出该字符的下标,若不能或不需要删除,请输出-1

    Sample Input

    aaab
    baa
    aaa

    Sample Output

    3
    0
    -1

    解题思路:
    这题折腾我好久,个人因为一些特殊的情况漏掉了,导致提交一直错误,我的做法步骤是,1、判断不删除字符是不是符合,2、去掉第一个字符是不是符合,3、去掉最后一个字符是不是符合,4、用一个i、j标记首位的下标,找到不相等的位置,开始判断,如果i的位置等于len/2,需要删除的字符位置就是i,如果不是就要分4种情况来判断了,第一种就是s[i+1]==s[j]&&s[i]==s[j-1],第二种s[i+1]!=s[j]&&s[i]==s[j-1],第三种s[i+1]==s[j]&&s[i]!=s[j-1]第四种s[i+1]!=s[j]&&s[i]!=s[j-1],用if来解决。

    AC代码:
    #include<iostream>
    #include<string>
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    #include<math.h>
    #include<algorithm>
    using namespace std;
    int flag,sum;
    char s[100005];
    
    int judge1(int si,int sj,int m)
    {
        int i,j;
        for(i=si,j=sj; i<m; i++,j--)
        {
            if(s[i]!=s[j]) return 0;
        }
        return 1;
    }
    int main()
    {
        int len,i,j,m;
        while(scanf("%s",s)!=EOF)
        {
            sum=0;
            len=strlen(s);
            m=len/2;
            if(judge1(0,len-1,m))
            {
                printf("-1
    ");continue;
            }
            if(len%2==1)
            {
                if(judge1(1,len-1,m+1))
                {
                   printf("0
    ");continue;
                }
                if(judge1(0,len-2,m-1))
                {
                    printf("%d
    ",len-1);continue;
                }
            }
            if(len%2==0)
            {
                if(judge1(1,len-1,m))
                {
                   printf("0
    ");continue;
                }
                if(judge1(0,len-2,m))
                {
                    printf("%d
    ",len-1);continue;
                }
            }
    
            for(i=0,j=len-1; i<m; i++,j--)
            {
                if(s[i]!=s[j])
                {
                    if(i!=m)
                    {
                        if(s[i+1]==s[j]&&s[i]!=s[j-1])
                        {
                            if(len%2==1) m++;
                            if(judge1(i+1,j,m)==1)
                            {
                                sum=1;
                                flag=i;
                            }
                        }
                        else if(s[i+1]!=s[j]&&s[i]==s[j-1])
                        {
                            if(!judge1(i,j-1,m)) break;
                            else
                            {
                                sum=1;
                                flag=j;
                            }
                        }
                        else if(s[i+1]==s[j]&&s[i]==s[j-1])
                        {
                            int mm=m,mm2=m;
                            if(len%2==1) mm++;
                            if(!judge1(i+1,j,mm))
                            {
                                if(!judge1(i,j-1,mm2)) break;
                                else
                                {
                                    sum=1;
                                    flag=j;
                                }
                            }
                            else
                            {
                                sum++;flag=i;
                            }
                        }
                    }
                    else
                    {
                        sum=1;
                        flag=i;
                    }
                    break;
                }
    
            }
            if(sum==1) printf("%d
    ",flag);
            else printf("-1
    ");
        }
        return 0;
    }
     
  • 相关阅读:
    归并排序——计算逆序数
    二分图 (匈牙利算法)
    拓扑排序
    读入外挂——秒杀scanf
    最小生成树(kruskal+并查集)
    最短路算法(dijkstra,bellman_ford,floyd)
    【Python】【Module】re
    【Python】【Module】os
    【Python】【Module】random
    【Python】【Module】time
  • 原文地址:https://www.cnblogs.com/gaojupeng/p/4480292.html
Copyright © 2011-2022 走看看