Created
January 10, 2022 13:33
-
-
Save wperron/87010a215954eb32c95cd1d3ed7b9325 to your computer and use it in GitHub Desktop.
Find all permutations of uppercase and lowercase characters in a string
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn main() { | |
println!("{:?}", case_permutation(String::from("ab2"))); | |
} | |
pub fn case_permutation(str: String) -> Vec<String> { | |
let mut permuts: Vec<String> = vec!["".to_string()]; | |
for c in str.chars() { | |
let mut tmp = vec![]; | |
let lower = c.to_ascii_lowercase(); | |
let upper = c.to_ascii_uppercase(); | |
if lower == upper { | |
for p in permuts.into_iter() { | |
let mut copy = p.clone(); | |
copy.push(c); | |
tmp.push(copy); | |
} | |
} else { | |
for p in permuts.into_iter() { | |
let mut low = p.clone(); | |
low.push(lower); | |
let mut up = p.clone(); | |
up.push(upper); | |
tmp.push(low); | |
tmp.push(up); | |
} | |
} | |
permuts = tmp; | |
} | |
permuts | |
} | |
#[cfg(test)] | |
mod test { | |
use super::*; | |
#[test] | |
fn test_case_permutation() { | |
let input = "ab2"; | |
assert_eq!( | |
case_permutation(String::from(input)), | |
vec!["ab2", "aB2", "Ab2", "AB2"] | |
); | |
let input = "35p"; | |
assert_eq!(case_permutation(String::from(input)), vec!["35p", "35P"]); | |
let input = "1234"; | |
assert_eq!(case_permutation(String::from(input)), vec!["1234"]); | |
let input = "ab"; | |
assert_eq!( | |
case_permutation(String::from(input)), | |
vec!["ab", "aB", "Ab", "AB"] | |
); | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment