32 lines
770 B
Rust
32 lines
770 B
Rust
|
pub fn is_anagram(a: String, b: String) -> bool {
|
||
|
// Both strings must have the same length otherwise they can't be anagrams.
|
||
|
if a.len() != b.len() {
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
// Sort both strings' characters so they're in alphabetical order.
|
||
|
let mut a = a.chars().collect::<Vec<_>>();
|
||
|
a.sort();
|
||
|
|
||
|
let mut b = b.chars().collect::<Vec<_>>();
|
||
|
b.sort();
|
||
|
|
||
|
// And if they are equal, then they're anagrams.
|
||
|
a == b
|
||
|
}
|
||
|
|
||
|
#[test]
|
||
|
fn test_valid_anagram() {
|
||
|
let samples = [
|
||
|
(("💖🌠banana", "an💖anab🌠"), true),
|
||
|
(("anagram", "nagaram"), true),
|
||
|
(("bats", "tabs"), true),
|
||
|
(("rat", "cat"), false),
|
||
|
(("bats", "bat"), false),
|
||
|
];
|
||
|
|
||
|
for ((a, b), expected) in samples {
|
||
|
assert_eq!(is_anagram(a.to_string(), b.to_string()), expected);
|
||
|
}
|
||
|
}
|