回文字符串,就是正着反着读都一样的字符串。
1、回文字符串判断
假如这个字符串为奇数长度的回文字符串,则除了最中间的字符外,其左右的字符串两两相同。
假如这个字符串为偶数长度的回文字符串,则其左右完全对称。
代码如下:
#include<iostream>
#include<string>
using namespace std;
bool palindrome(string str)//判断是否为回文字符
{
int length = str.size();
if (length <= 0) return false;
if (length == 1) return true;
int left = length / 2 - 1;
int right = length - length / 2;
while (left >= 0 && right < length)
{
if (str[left--] != str[right++])
{
return false;
}
}
return true;
}
int main()
{
string str;
getline(cin,str);
cout<<palindrome(str);
return 0;
}
2、最长回文字符串长度判断
从第一个字符开始,分析以其为中心的奇数长度或者偶数长度的最长回文字符串。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int longestpalindrome(string str)
{
int length = str.size();
if (length <= 0) return 0;
if (length == 1) return 1;
int i, j;
int max = 0;
for ( i = 0; i < length; i++)//以i为中心
{
for (j = 0;(i-j>=0)&&(i+j<length);j++)//奇数回文字符串
{
if (str[i - j] != str[i + j])
break;
}
if (2 * (j-1) + 1 > max)
max = 2 * (j - 1) + 1;
for (j = 0;(i-j>=0)&&(i+j+1<length);j++)//偶数回文字符串
{
if (str[i - j] != str[i + j + 1])
break;
}
if (2 * j > max)
max = 2 * j;
}
return max;
}
int main()
{
string str;
getline(cin, str);
cout << longestpalindrome(str);
return 0;
}
博客围绕回文字符串展开,介绍回文字符串是正着反着读都一样的字符串。阐述了回文字符串的判断方法,奇数长度时除中间字符外左右两两相同,偶数长度时左右完全对称,还说明了最长回文字符串长度的判断方式,即从首字符分析其为中心的最长回文串。
739

被折叠的 条评论
为什么被折叠?



