题目描述
A string S of an odd length is said to be a strong palindrome if and only if all of the following conditions are satisfied:
·S is a palindrome.
·Let N be the length of S. The string formed by the 1-st through ((N−1)/2)-th characters of S is a palindrome.
·The string consisting of the (N+3)/2-st through N-th characters of S is a palindrome.
Determine whether S is a strong palindrome.
Constraints
·S consists of lowercase English letters.
·The length of S is an odd number between 3 and 99 (inclusive).
输入
Input is given from Standard Input in the following format:
S
输出
If S is a strong palindrome, print Yes; otherwise, print No.
样例输入
【样例1】
akasaka
【样例2】
level
【样例3】
atcoder
样例输出
【样例1】
Yes
【样例2】
No
【样例3】
No
提示
样例1解释
S is akasaka.
The string formed by the 1-st through the 3-rd characters is aka.
The string formed by the 5-th through the 7-th characters is aka. All of these are palindromes, so S is a strong palindrome.
check函数判断回文串的时候条件不能写 l != r
因为l和r相差1的时候会出错,要写成 l < r
AC代码
#include <iostream>
#include <vector>
#include <algorithm>
#include <cstdio>
using namespace std;
string str;
bool check(int l,int r)
{
l--,r--;
while(l < r)
{
if(str[l] != str[r]) break;
l++,r--;
}
//cout << l << endl << r << endl;
if(l < r) return 0;
return 1;
}
int main()
{
cin >> str;
if( check( 1,str.size() ) && check( 1,(str.size()-1)/2 ) && check( (str.size()+3)/2,str.size() ) )
{
cout << "Yes" << endl;
}
else
{
cout << "No" << endl;
}
return 0;
}