#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
bool isPalindrome(string s){
for(ll i = 0; i < s.size()/2; i++){
if(s[i] != s[s.size() - i - 1]){
return false;
}
}
return true;
}
bool couldBeAPalindrome(string s){
pair<int, int> result = {count(s.begin(), s.end(), 'a')%2, count(s.begin(), s.end(), 'b')%2};
if(s.size()%2 == 0 && !result.first && !result.second) return true;
else if(s.size()%2 != 0 && ((result.first && !result.second) || (!result.first || result.second))) return true;
else return false;
}
ll n_of_changes(string s, ll curr_n = 0, ll id = 0){
if(isPalindrome(s)){
return curr_n;
}
ll total_n = LONG_MAX, i = id;
while(i < s.size() - 1){
if(s[i] != s[i+1]){
string new_s = s;
swap(new_s[i], new_s[i+1]);
total_n = min(total_n, n_of_changes(new_s, curr_n+1, i+1));
}
i++;
}
return total_n;
}
int main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
string s;
cin >> s;
(couldBeAPalindrome(s)) ? cout << n_of_changes(s) : cout << -1;
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 | #include<bits/stdc++.h> using namespace std; typedef long long ll; bool isPalindrome(string s){ for(ll i = 0; i < s.size()/2; i++){ if(s[i] != s[s.size() - i - 1]){ return false; } } return true; } bool couldBeAPalindrome(string s){ pair<int, int> result = {count(s.begin(), s.end(), 'a')%2, count(s.begin(), s.end(), 'b')%2}; if(s.size()%2 == 0 && !result.first && !result.second) return true; else if(s.size()%2 != 0 && ((result.first && !result.second) || (!result.first || result.second))) return true; else return false; } ll n_of_changes(string s, ll curr_n = 0, ll id = 0){ if(isPalindrome(s)){ return curr_n; } ll total_n = LONG_MAX, i = id; while(i < s.size() - 1){ if(s[i] != s[i+1]){ string new_s = s; swap(new_s[i], new_s[i+1]); total_n = min(total_n, n_of_changes(new_s, curr_n+1, i+1)); } i++; } return total_n; } int main(){ ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); string s; cin >> s; (couldBeAPalindrome(s)) ? cout << n_of_changes(s) : cout << -1; return 0; } |
English