Encrypt the given string with the following operations

10 Jun, 2021
Given a string s, the task is to encrypt the string in the following way: 
If the frequency of current character is even, then increment current character by x.If the frequency of current character is odd, then decrement current character by x.
If the frequency of current character is even, then increment current character by x.
If the frequency of current character is odd, then decrement current character by x.
Note: All the operations are circular that is adding 1 to ‘z’ will give ‘a’ and subtracting 1 from ‘a’ will give ‘z’
Examples:
Input :s=”abcda”, x=3 Output :dyzad ‘a’ appear 2 times in the string, hence incrementing ‘a’ by 3 becomes ‘d’ ‘b’ appear 1 times in the string, hence decrementing ‘b’ by 3 becomes ‘y’ ‘c’ appear 1 times in the string, hence decrementing ‘c’ by 3 becomes ‘z’ ‘d’ appear 1 times in the string, hence decrementing ‘d’ by 3 becomes ‘a’ ‘a’ appear 2 times in the string, hence incrementing ‘a’ by 3 becomes ‘d’ Hence the string becomes “dyzad”
Input :s=”aabbc”, x=5 Output :ffggx  
Approach: 
Create a frequency array to store the frequency of each character .
Traverse the given string and for every character if its frequency is even, then increment it by x else if the frequency is odd decrement it by x.
Below is the implementation of the above approach:
C++
Java
Python3
C#
Javascript
// C++ implementation of the above approach:#include <bits/stdc++.h>#define MAX 26using namespace std; // Function to return the encrypted stringstring encryptStr(string str, int n, int x){         // Reduce x because rotation of    // length 26 is unnecessary    x = x % MAX;         // Calculate the frequency of characters    int freq[MAX] = {0};         for(int i = 0; i < n; i++)    {        freq[str[i] - 'a']++;    }         for(int i = 0; i < n; i++)    {                 // If the frequency of current character        // is even then increment it by x        if (freq[str[i] - 'a'] % 2 == 0)        {            int pos = (str[i] - 'a' + x) % MAX;            str[i] = (char)(pos + 'a');        }                 // Else decrement it by x        else        {            int pos = (str[i] - 'a' - x);                         if (pos < 0)            {                pos += MAX;            }                         str[i] = (char)(pos + 'a');        }    }         // Return the count    return str;} // Driver codeint main(){    string s = "abcda";    int n = s.size();    int x = 3;         cout << encryptStr(s, n, x) << endl;         return 0;} // This code is contributed by avanitrachhadiya2155
// Java implementation of the above approach:public class GFG {     static final int MAX = 26;     // Function to return the encrypted string    static String encryptStr(String str, int n, int x)    {         // Reduce x because rotation of        // length 26 is unnecessary        x = x % MAX;        char arr[] = str.toCharArray();         // calculate the frequency of characters        int freq[] = new int[MAX];        for (int i = 0; i < n; i++)            freq[arr[i] - 'a']++;         for (int i = 0; i < n; i++) {             // If the frequency of current character            // is even then increment it by x            if (freq[arr[i] - 'a'] % 2 == 0) {                int pos = (arr[i] - 'a' + x) % MAX;                arr[i] = (char)(pos + 'a');            }             // Else decrement it by x            else {                int pos = (arr[i] - 'a' - x);                if (pos < 0)                    pos += MAX;                arr[i] = (char)(pos + 'a');            }        }         // Return the count        return String.valueOf(arr);    }     // Driver code    public static void main(String[] args)    {        String s = "abcda";        int n = s.length();        int x = 3;        System.out.println(encryptStr(s, n, x));    }}
# Python3 implementation of the above approach:MAX = 26 # Function to return the encrypted stringdef encryptstrr(strr, n, x):         # Reduce x because rotation of    # length 26 is unnecessary    x = x % MAX    arr = list(strr)         # calculate the frequency of characters    freq = [0]*MAX    for i in range(n):        freq[ord(arr[i]) - ord('a')] += 1         for i in range(n):                 # If the frequency of current character        # is even then increment it by x        if (freq[ord(arr[i]) - ord('a')] % 2 == 0):            pos = (ord(arr[i]) - ord('a') + x) % MAX            arr[i] = chr(pos + ord('a'))                 # Else decrement it by x        else:            pos = (ord(arr[i]) - ord('a') - x)            if (pos < 0):                pos += MAX            arr[i] = chr(pos + ord('a'))                 # Return the count    return "".join(arr)  # Driver codes = "abcda"n = len(s)x = 3print(encryptstrr(s, n, x)) # This code is contributed by# shubhamsingh10
// C# implementation of the above approach:using System; class GFG{     static int MAX = 26;     // Function to return the encrypted string    public static char[] encryptStr(String str,                                    int n, int x)    {         // Reduce x because rotation of        // length 26 is unnecessary        x = x % MAX;        char[] arr = str.ToCharArray();         // calculate the frequency of characters        int[] freq = new int[MAX];        for (int i = 0; i < n; i++)            freq[arr[i] - 'a']++;         for (int i = 0; i < n; i++)        {             // If the frequency of current character            // is even then increment it by x            if (freq[arr[i] - 'a'] % 2 == 0)            {                int pos = (arr[i] - 'a' + x) % MAX;                arr[i] = (char)(pos + 'a');            }             // Else decrement it by x            else            {                int pos = (arr[i] - 'a' - x);                if (pos < 0)                    pos += MAX;                arr[i] = (char)(pos + 'a');            }        }         // Return the count        return arr;    }     // Driver code    public static void Main(String[] args)    {        String s = "abcda";        int n = s.Length;        int x = 3;        Console.WriteLine(encryptStr(s, n, x));    }} // This code is contributed by// sanjeev2552
<script>// Javascript implementation of the above approach:var MAX = 26; // Function to return the encrypted stringfunction encryptStr(str, n, x){         // Reduce x because rotation of    // length 26 is unnecessary    x = x % MAX;         // Calculate the frequency of characters    var freq = Array(MAX).fill(0);         for(var i = 0; i < n; i++)    {        freq[str[i].charCodeAt(0) - 'a'.charCodeAt(0)]++;    }         for(var i = 0; i < n; i++)    {                 // If the frequency of current character        // is even then increment it by x        if (freq[str[i].charCodeAt(0) - 'a'.charCodeAt(0)] % 2 == 0)        {            var pos = (str[i].charCodeAt(0) - 'a'.charCodeAt(0) + x) % MAX;            str[i] = String.fromCharCode(pos + 'a'.charCodeAt(0));        }                 // Else decrement it by x        else        {            var pos = (str[i].charCodeAt(0) - 'a'.charCodeAt(0) - x);                         if (pos < 0)            {                pos += MAX;            }                         str[i] = String.fromCharCode(pos + 'a'.charCodeAt(0));        }    }         // Return the count    return str.join('');} // Driver codevar s = "abcda";var n = s.length;var x = 3; document.write( encryptStr(s.split(''), n, x)); </script>
dyzad
 
Time Complexity: O(N) 
sanjeev2552
SHUBHAMSINGH10
avanitrachhadiya2155
rutvik_56
akshaysingh98088
Strings
Strings
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Python program to check if a string is palindrome or not
KMP Algorithm for Pattern Searching
Longest Palindromic Substring | Set 1
Length of the longest substring without repeating characters
Convert string to char array in C++
Top 50 String Coding Problems for Interviews
Check whether two strings are anagram of each other
What is Data Structure: Types, Classifications and Applications
Reverse words in a given string
Print all the duplicates in the input string