Applese 的回文串

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

C++版本一

题解:

std

可以认为插入和删除是等价的操作。想到这一点,这题就会好做很多。
如果这个串本身就是回文串,答案一定是Yes。
否则我们只需要考虑串中对称的位置不相等的两个字符,分别尝试把它们删掉后判断一下是不是回文的就行了。

#include 
using namespace std;
 
int check(const string& s)
{
    int n = s.length();
    for (int i = 0; i < n; i++)
        if (s[i] != s[n - 1 - i])
            return i;
    return -1;
}
 
int main()
{
    string s;
    cin >> s;
    int diff = check(s);
    if (diff == -1)
        cout << "Yes" << endl;
    else
    {
        string tmp = s;
        string s1 = s.erase(diff, 1);
        string s2 = tmp.erase(tmp.length() - 1 - diff, 1);
        if (check(s1) == -1 || check(s2) == -1)
            cout << "Yes" << endl;
        else
            cout << "No" << endl;
    }
    return 0;
}

 C++版本二

/*
*@Author:   STZG
*@Language: C++
*/
#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
//#define DEBUG
#define RI register int
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=100000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
int t,n,m,k,q;
int ans,cnt,flag,temp;
int a[N];
char str[N],tmp[N];
int main()
{
#ifdef DEBUG
	freopen("input.in", "r", stdin);
	//freopen("output.out", "w", stdout);
#endif
    scanf("%s",str);
    //scanf("%d",&t);
    //while(t--){}
    int len=strlen(str);
    flag=0;
    for(int i=0;i

 

你可能感兴趣的:(#,C++,#,2019,牛客寒假算法基础集训营)