题目链接: 非对称之美
题目要求求最长非回文子字符串的长度, 那么如果字符串本身不是回文串, 那么长度就是该字符串本身的长度:
如果字符串本身是一个回文串, 那么只需把该字符串去掉一个字母后, 该字符串就不是回文串了, 长度也就是原本的长度减 1, 即:
所以想要求最长非回文子字符串的长度就变成了先判断题目给出的字符串是否是回文串, 如果是则输出长度 -1, 如果不是直接输出长度即可, 但存在一种特殊情况, 即该回文串全是由同一个字母构成的:
此时无论怎么删除都不会得到非回文子字符串, 所以开头可以特判一下这种特殊情况, 题解代码:
#include <iostream>
using namespace std;
int main()
{
string str;
cin >> str;
bool flag = true;
for(int i = 0; i < str.size() - 1; ++i)
{
if(str[i] != str[i + 1])
{
flag = false;
break;
}
}
if(flag)
{
cout << 0 << endl;
return 0;
}
int left = 0;
int right = str.size() - 1;
while(left < right)
{
if(str[left] != str[right])
{
break;
}
left++;
right--;
}
if(left >= right)
{
cout << str.size() - 1 << endl;
}
else
{
cout << str.size() << endl;
}
return 0;
}