Skip to content

Instantly share code, notes, and snippets.

@wperron
Created January 10, 2022 13:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save wperron/87010a215954eb32c95cd1d3ed7b9325 to your computer and use it in GitHub Desktop.
Save wperron/87010a215954eb32c95cd1d3ed7b9325 to your computer and use it in GitHub Desktop.
Find all permutations of uppercase and lowercase characters in a string
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