###### Letter Case Permutation | February Leetcoding challenge 2021 | Day 16
Manas Sinha
Developer | Designer

## Letter Case Permutation

`PROBLEM  STATEMENT:`
Given a string S, we can transform every letter individually to be lowercase or uppercase to create another string.
Return a list of all possible strings we could create. You can return the output in any order.

Example 1
```Input: S = "a1b2"
Output: ["a1b2","a1B2","A1b2","A1B2"]
```
Example 2
```Input: S = "3z4"
Output: ["3z4","3Z4"]
```
Example 3
```Input: S = "12345"
Output: ["12345"]
```
Example 4
```Input: S = "0"
Output: ["0"]
```
Constraints:
• `S` will be a string with length between `1` and `12`.
• `S` will consist only of letters or digits.

## Explanation

This problem can be solved using backtracking approach.
`ALGORITHM: `
• Start processing the string from left to right.
• Base case : If you reach the last index of the string, add the string generated to the result array and terminate.
• Append the current character the temporary string (we don’t need to check if its an alphabet or number) and make a recursive call for next index.
• Now if the current charachter is a lowercase alphabet we append its uppercase to the temporary string else the lowercase. And make a recursive call for next index.
• Doing this, if the current character was numeric there will be only one recursive call (step 3) and if its an alphabet there will be another call (step 4).
``````Analysis of output for : a1b2

current string :
current string : a
current string : a1
current string : a1b
current string : a1b2

pushing string : a1b2

reverted back to : a1b
reverted back to : a1

changing case of b

current string : a1B
current string : a1B2

pushing string : a1B2

reverted back to : a1B
reverted back to : a1
reverted back to : a
reverted back to :

changing case of a

current string : A
current string : A1
current string : A1b
current string : A1b2

pushing string : A1b2

reverted back to : A1b
reverted back to : A1

changing case of b

current string : A1B
current string : A1B2

pushing string : A1B2

reverted back to : A1B
reverted back to : A1
reverted back to : A
reverted back to :

Exit``````

## code

``````class Solution {
public:
vector<string> res;
void solve(string s,int i=0,string temp=""){
if(i == s.size()){
res.push_back(temp);
return;
}

solve(s,i+1,temp+s[i]);
int diff = 'a'-'A';
if(s[i]>='a' && s[i]<='z')
{
char c = (s[i]-diff);
solve(s,i+1,temp+c);
}
else if(s[i]>='A' && s[i]<='Z'){
char c = (s[i]+diff);
solve(s,i+1,temp+c);
}
}
vector<string> letterCasePermutation(string S) {
solve(S);
return res;
}
};``````