# Permute a string by changing case

• Difficulty Level : Hard
• Last Updated : 21 May, 2021

Print all permutations of a string keeping the sequence but changing cases.
Examples:

```Input : ab
Output : AB Ab ab aB

Input : ABC
Output : abc Abc aBc ABc abC AbC aBC ABC```

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.

Method 1 (Naive) : Naive approach would be to traverse the whole string and for every character, consider two cases, (1) change case and recur (2) Do not change case and recur.
Method 2 (Better) For a string of length n there exists 2n maximum combinations. We can represent this as a bitwise operation.
The same idea is discussed in Print all subsequences.
Below is the implementation of above idea :

## C++

 `// CPP code to print all permutations``// with respect to cases``#include ``using` `namespace` `std;` `// Function to generate permutations``void` `permute(string input)``{``    ``int` `n = input.length();` `    ``// Number of permutations is 2^n``    ``int` `max = 1 << n;` `    ``// Converting string to lower case``        ``transform(input.begin(), input.end(), input.begin(),``                                                ``::``tolower``);``    ``// Using all subsequences and permuting them``    ``for` `(``int` `i = 0; i < max; i++) {``        ` `        ``// If j-th bit is set, we convert it to upper case``        ``string combination = input;``        ``for` `(``int` `j = 0; j < n; j++)``            ``if` `(((i >> j) & 1) == 1)``                ``combination[j] = ``toupper``(input.at(j));    ` `        ``// Printing current combination``        ``cout << combination << ``" "``;``    ``}``}` `// Driver code``int` `main()``{``    ``permute(``"ABC"``);``    ``return` `0;``}`

## Java

 `// Java program to print all permutations``// with respect to cases` `public` `class` `PermuteString``{``    ``// Function to generate permutations``    ``static` `void` `permute(String input)``    ``{``        ``int` `n = input.length();``        ` `        ``// Number of permutations is 2^n``        ``int` `max = ``1` `<< n;``        ` `        ``// Converting string to lower case``        ``input = input.toLowerCase();``        ` `        ``// Using all subsequences and permuting them``        ``for``(``int` `i = ``0``;i < max; i++)``        ``{``            ``char` `combination[] = input.toCharArray();``            ` `            ``// If j-th bit is set, we convert it to upper case``            ``for``(``int` `j = ``0``; j < n; j++)``            ``{``                ``if``(((i >> j) &  ``1``) == ``1``)``                    ``combination[j] = (``char``) (combination[j]-``32``);``            ``}``            ` `            ``// Printing current combination``            ``System.out.print(combination);``            ``System.out.print(``"   "``);``        ``}``    ``}``    ` `    ``// Driver Program to test above function``    ``public` `static` `void` `main(String[] args)``    ``{``        ``permute(``"ABC"``);``    ``}``}` `// This code is contributed by Sumit Ghosh`

## Python

 `# Python code to print all permutations``# with respect to cases` `# Function to generate permutations``def` `permute(inp):``    ``n ``=` `len``(inp)`` ` `    ``# Number of permutations is 2^n``    ``mx ``=` `1` `<< n`` ` `    ``# Converting string to lower case``    ``inp ``=` `inp.lower()``    ` `    ``# Using all subsequences and permuting them``    ``for` `i ``in` `range``(mx):``        ``# If j-th bit is set, we convert it to upper case``        ``combination ``=` `[k ``for` `k ``in` `inp]``        ``for` `j ``in` `range``(n):``            ``if` `(((i >> j) & ``1``) ``=``=` `1``):``                ``combination[j] ``=` `inp[j].upper()`` ` `        ``temp ``=` `""``        ``# Printing current combination``        ``for` `i ``in` `combination:``            ``temp ``+``=` `i``        ``print` `temp,``        ` `# Driver code``permute(``"ABC"``)` `# This code is contributed by Sachin Bisht`

## C#

 `// C# program to print all permutations``// with respect to cases``using` `System;` `class` `PermuteString  {``    ` `    ``// Function to generate``    ``// permutations``    ``static` `void` `permute(String input)``    ``{``        ``int` `n = input.Length;``        ` `        ``// Number of permutations is 2^n``        ``int` `max = 1 << n;``        ` `        ``// Converting string``        ``// to lower case``        ``input = input.ToLower();``        ` `        ``// Using all subsequences``        ``// and permuting them``        ``for``(``int` `i = 0;i < max; i++)``        ``{``            ``char` `[]combination = input.ToCharArray();``            ` `            ``// If j-th bit is set, we``            ``// convert it to upper case``            ``for``(``int` `j = 0; j < n; j++)``            ``{``                ``if``(((i >> j) & 1) == 1)``                    ``combination[j] = (``char``) (combination[j] - 32);``            ``}``            ` `            ``// Printing current combination``            ``Console.Write(combination);``            ``Console.Write(``" "``);``        ``}``    ``}``    ` `    ``// Driver Code``    ``public` `static` `void` `Main()``    ``{``        ``permute(``"ABC"``);``    ``}``}` `// This code is contributed by Nitin Mittal.`

## PHP

 `> ``\$j``) & 1) == 1)``                ``\$combination``[``\$j``] = ``chr``(ord(``\$combination``[``\$j``]) - 32);``        ``}``        ` `        ``// Printing current combination``        ``echo` `\$combination` `. ``" "``;``    ``}``}` `// Driver Code``permute(``"ABC"``);` `// This code is contributed by mits``?>`

## Javascript

 ``

Output:

`abc Abc aBc ABc abC AbC aBC ABC`