#include<iostream>
#include<string>
using namespace std;
bool palindrom(string a){
int i=0,l;
for ( int j = a.length()-1; i < j;j--)
{
l=j;
if (a[i] != a[j])break;
++i;
}
if(a[i]==a[l-1])i++;
if (i < l)
return false;
else
return true;
}
void zamiana(int &spr,string &w, int st, int ko, char sz){
spr=0;
for(int i=st+1;i<ko;++i){
if(w[i]==sz){
w[i]=w[st];
spr=1;
break;
}
}
}
int poprawianie(string &w){
int c=0;
int i=0;
int spr=0;
for(int j=w.length()-1;i<j;--j){
if(w[i]!=w[j]){
zamiana(spr,w,i,j,w[j]);
if(spr==0)return -1;
++c;
}
++i;
}
return c;
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
string wyr;
cin>>wyr;
int a=0,b=0;
for(int i=0;i<wyr.length();++i){
if(wyr[i]=='a')++a;
else ++b;
}
if(a%2!=0 && b&2!=0){
cout<<-1;
return 0;
}
if(palindrom(wyr)){
cout<<0;
return 0;
}
cout<<poprawianie(wyr);
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | #include<iostream> #include<string> using namespace std; bool palindrom(string a){ int i=0,l; for ( int j = a.length()-1; i < j;j--) { l=j; if (a[i] != a[j])break; ++i; } if(a[i]==a[l-1])i++; if (i < l) return false; else return true; } void zamiana(int &spr,string &w, int st, int ko, char sz){ spr=0; for(int i=st+1;i<ko;++i){ if(w[i]==sz){ w[i]=w[st]; spr=1; break; } } } int poprawianie(string &w){ int c=0; int i=0; int spr=0; for(int j=w.length()-1;i<j;--j){ if(w[i]!=w[j]){ zamiana(spr,w,i,j,w[j]); if(spr==0)return -1; ++c; } ++i; } return c; } int main(){ ios_base::sync_with_stdio(false); cin.tie(NULL); string wyr; cin>>wyr; int a=0,b=0; for(int i=0;i<wyr.length();++i){ if(wyr[i]=='a')++a; else ++b; } if(a%2!=0 && b&2!=0){ cout<<-1; return 0; } if(palindrom(wyr)){ cout<<0; return 0; } cout<<poprawianie(wyr); return 0; } |
English