大家好,又见面了,我是你们的朋友全栈君。
回文字符串,就是正着反着读都一样的字符串。
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;
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/135131.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...