zoukankan      html  css  js  c++  java
  • 牛客寒假算法基础集训营4 Applese 的回文串(思维)

    Applese 的回文串

    链接:https://ac.nowcoder.com/acm/contest/330/I

    题目描述


    自从 Applese 学会了字符串之后,精通各种字符串算法,比如……判断一个字符串是不是回文串。

    这样的题目未免让它觉得太无聊,于是它想到了一个新的问题。

    如何判断一个字符串在任意位置(包括最前面和最后面)插入一个字符后能不能构成一个回文串?

    输入描述:

    仅一行,为一个由字母和数字组成的字符串 s。

    输出描述:

    如果在插入一个字符之后可以构成回文串,则输出"Yes", 否则输出"No"。
    示例1

    输入

    applese

    输出

    No
    示例2

    输入

    java

    输出

    Yes

    备注:

    |s|10^5
    题解:
      在任意位置插入一个字符可以构成回文串等价于在任意位置删除一个字符可以构成字符串。有一个巨坑 abc.......bca究竟用左边的b匹配右边的b还是用右边的c匹配左边的c更优呢
     1 #include<iostream>
     2 #include<cstring>
     3 #include<cstdio>
     4 #include<algorithm>
     5 using namespace std;
     6 const int maxn=1e5+10;
     7 char s[maxn];
     8 int main()
     9 {
    10     scanf("%s",s);
    11     int flag=0;
    12     int cnt=0;
    13     int len=strlen(s);
    14     for(int i=0,j=len-1;i<j;i++,j--)
    15     {
    16         if(cnt>=2)
    17             break;
    18         if(s[i]!=s[j])
    19         {
    20             cnt++;
    21             if(s[i+1]==s[j]&&s[i]!=s[j-1])
    22                 i++;
    23             else if(s[i]==s[j-1]&&s[i+1]!=s[j])
    24                 j--;
    25             else if(s[i]==s[j-1]&&s[i+1]==s[j])
    26             {
    27                 int flag1=0,flag2=0;
    28                 for(int l=i,r=j-1;l<r;l++,r--)
    29                 {
    30                     if(s[l]!=s[r])
    31                     {
    32                         flag1=1;
    33                         break;
    34                     }
    35                 }
    36                 for(int l=i+1,r=j;l<r;l++,r--)
    37                 {
    38                     if(s[l]!=s[r])
    39                     {
    40                         flag2=1;
    41                         break;
    42                     }
    43                 }
    44                 if(flag1==0||flag2==0)
    45                 {
    46                     puts("Yes");
    47                     return 0;
    48                 }
    49                 else
    50                 {
    51                     puts("No");
    52                     return 0;  
    53                 }
    54                  
    55             }
    56             else
    57             {
    58                 cnt++;
    59             }
    60         }
    61     }
    62     if(cnt<2)
    63         puts("Yes");
    64     else
    65         puts("No");
    66 }
     
  • 相关阅读:
    JAVA应用程序占用CPU、内存过高分析过程
    html和css问题?
    html跳动的心实现代码
    css知识点总结
    html注册栏网页练习代码
    前端开发单词大全
    html常用代码合集
    html背景图星际导航图练习
    html迪士尼网页实现代码
    html阿里云网页练习实现代码
  • 原文地址:https://www.cnblogs.com/1013star/p/10369828.html
Copyright © 2011-2022 走看看