代码有点长,请耐心看完
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
int a[50000];
void zhuan(string k,int i){
if(k=="a")
a[i]=1;
if(k=="b")
a[i]=2;
if(k=="c")
a[i]=3;
if(k=="d")
a[i]=4;
if(k=="e")
a[i]=5;
if(k=="f")
a[i]=6;
if(k=="g")
a[i]=7;
if(k=="h")
a[i]=8;
if(k=="i")
a[i]=9;
if(k=="j")
a[i]=10;
if(k=="k")
a[i]=11;
if(k=="l")
a[i]=12;
if(k=="m")
a[i]=13;
if(k=="n")
a[i]=14;
if(k=="o")
a[i]=15;
if(k=="p")
a[i]=16;
if(k=="q")
a[i]=17;
if(k=="r")
a[i]=18;
if(k=="s")
a[i]=19;
if(k=="t")
a[i]=20;
if(k=="u")
a[i]=21;
if(k=="v")
a[i]=22;
if(k=="w")
a[i]=23;
if(k=="x")
a[i]=24;
if(k=="y")
a[i]=25;
if(k=="z")
a[i]=26;
}
bool shi(string k,int q){
int x=0;
int b[26];
memset(b,0,sizeof(b));
for(int i=0;i<k.size();i++){//判断是否是回文数
if(k.substr(i,1)==k.substr(k.size()-i-1),1)
x++;
if(k.substr(i,1)=="0")
return 0;
}
if(x==k.size()){//判断是否有重复
for(int i=0;i<=k.size();i++){
if(b[a[q+i]]>2)
return 0;
else
b[a[q+i]]++;
}
return 1;
}
return 0;
}
int main(){
int ji=0,t;
string n,k;
char lin;
cin>>n;
ji=n.size()*2-1;
for(int i=0;i<n.size();i++){
k=n.substr(i,1);
zhuan(k,i);
}
n+="00000000000000000000000000000000000000000000000000";
for(int i=0;i<n.size()-52;i++)
for(int j=3;j<=52;j++){
k=n.substr(i,j);
if(shi(k,i))
ji++;
}
cout<<ji;
}