Header Ads Widget

Anti-palindrome strings | Hackerearth practice problem solution

 Problem:-

You are given a string S containing only lowercase alphabets. You can swap two adjacent characters any number of times (including 0).

A string is called anti-palindrome if it is not a palindrome. If it is possible to make a string anti-palindrome, then find the lexicographically smallest anti-palindrome. Otherwise, print 1.

Input format

  • The first line contains a single integer T denoting the number of test cases. The description of T test cases follows.
  • Each line contains a string S of lower case alphabets only.

Output format

For each test case, print the answer in a new line.

Constraints

1T100

2|S|2×105

S contains only lowercase alphabets.

Sample Input
4
bpc
pp
deep
zyx
Sample Output
bcp
-1
deep
xyz
Time Limit: 1
Memory Limit: 256
Source Limit:
Explanation
  • In the first test case, you can create "bcp" which is not a palindrome and it is a lexicographically-smallest string.
  • In the second test case, you cannot form any anti palindrome.

Code:-

in the starting i use three lines:-

ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);

this is only for reducing the time limit of the execution

Solution:-

#include<bits/stdc++.h>
using namespace std;

int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    cout.tie(NULL);
    int t;
    cin>>t;
    string str1,str2;
    while(t--)
    {
        cin>>str1;
        str2=str1;
        reverse(str1.begin(),str1.end());
        if(str1==str2)
         cout<<"-1"<<endl;
        else
        {
            sort(str1.begin(),str1.end());
            cout<<str1<<endl;
        }
    }
    return 0;
}