初级练习
单双回文
对于一个字符串如果从前往后读和从后往前读是一样的,那么我们就叫他回文串;
在此基础上,如果把一个回文串拿出前l/2部分和后l/2部分,分别组成的两个子串都是回文串,则这个回文串可称为双回文串。
请编程判断给定字符串的类型。
个人思路
1:降低优先级:不满足双回文则降低到单回文,再降到不是回文;
2:双回文必定为偶数;
尝试使用了string,并没有什么亮点…
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>
#include<stdlib.h>
#include<string>
using namespace std;
int main()
{
int n;//输入组数
while(cin>>n)
{
for(int p=0;p<n;p++)
{
string word;//此题与char[]并无区别...
cin>>word;
int flag=2;//0不是回文,1单回,2双回
if(word.size()%2!=0)//不是偶数直接降低优先级
{
flag=1;
}
for(int i=0;i<=word.size()/2;i++)
{
if(word[i]!=word[word.size()-i-1])
{
flag=0;
break;
}
}
if(!flag)
cout<<"Case #"<<p+1<<": Not Palindrome"<<endl;
else
{
for(int i=0;i<=word.size()/4;i++)
{
if(word[i]!=word[word.size()/2-i-1])
{
flag=1;
break;
}
}
if(flag==1)
cout<<"Case #"<<p+1<<": Single Palindrome"<<endl;
else
{
for(int i=word.size()/2;i<word.size()*3/4;i++)
{
if(word[i]!=word[word.size()-i-1])
{
flag=1;
break;
}
}
if(flag==1)
cout<<"Case #"<<p+1<<": Single Palindrome"<<endl;
else
cout<<"Case #"<<p+1<<": Double Palindrome"<<endl;
}
}
}
}
return 0;
}