Skip to content
Related Articles

Related Articles

Improve Article

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

 

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 <bits/stdc++.h>
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




<?php
// PHP program to print all permutations
// with respect to cases
 
// Function to generate permutations
function permute($input)
{
    $n = strlen($input);
     
    // Number of permutations is 2^n
    $max = 1 << $n;
     
    // Converting string to lower case
    $input = strtolower($input);
     
    // Using all subsequences and permuting them
    for($i = 0; $i < $max; $i++)
    {
        $combination = $input;
         
        // If j-th bit is set, we convert
        // it to upper case
        for($j = 0; $j < $n; $j++)
        {
            if((($i >> $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




<script>
 
// javascript program to prvar all permutations
// with respect to cases
 
 
// Function to generate permutations
function permute(input)
{
    var n = input.length;
     
    // Number of permutations is 2^n
    var max = 1 << n;
     
    // Converting string to lower case
    input = input.toLowerCase();
     
    // Using all subsequences and permuting them
    for(var i = 0;i < max; i++)
    {
        var combination = input.split('');
         
        // If j-th bit is set, we convert it to upper case
        for(var j = 0; j < n; j++)
        {
            if(((i >> j) &  1) == 1)
                combination[j] = String.fromCharCode(combination[j].charCodeAt(0)-32);
        }
         
        // Printing current combination
        document.write(combination.join(''));
        document.write("   ");
    }
}
 
// Driver Program to test above function
permute("ABC");
 
// This code contributed by Princi Singh
</script>

Output: 
 

abc Abc aBc ABc abC AbC aBC ABC

Asked in : Facebook.
This article is contributed by Rohit Thapliyal. If you like GeeksforGeeks and would like to contribute, you can also write an article using write.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.
Please write comments if you find anything incorrect, or you want to share more information about the topic discussed above.
 

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.




My Personal Notes arrow_drop_up
Recommended Articles
Page :