242. 有效的字母异位词
题目描述
给定两个字符串 s 和 t ,编写一个函数来判断 t 是否是 s 的字母异位词。
注意:若 s 和 t 中每个字符出现的次数都相同,则称 s 和 t 互为字母异位词。
解题思路
#![allow(unused)] fn main() { struct Solution {} impl Solution { pub fn is_anagram(s: String, t: String) -> bool { use std::collections::HashMap; if s.len() != t.len() { return false } let mut freq: HashMap<char, usize> = HashMap::new(); for c in s.chars() { *freq.entry(c).or_default() += 1; } for c in t.chars() { let entry = freq.entry(c).or_default(); if *entry == 0 { return false } *entry -= 1; } true } } }
学习感想
Rust 一个char的大小永远就是4字节,在&str里,永远都是utf8编码的,但是占用的长度可能是1-4个字节
Sequences: Vec, VecDeque, LinkedList Maps: HashMap, BTreeMap Sets: HashSet, BTreeSet Misc: BinaryHeap
Borrow 的一个常见应用场景是 HashMap 之类的容器类型。在 HashMap 中,可以用 Borrow 来允许使用不同但兼容的类型进行查找或删除操作。比如,HashMap<String, V> 可以接受 &str 作为键,因为 String 实现了 Borrow
impl 块 在 Rust 中是全局可见的,因为它定义了类型的行为,Rust 需要确保这些行为在整个程序中保持一致。 use 语句 只在局部可见,这样可以避免命名冲突,并且保持模块系统的封装性和灵活性。
#![allow(unused)] fn main() { struct Solution {} impl Solution { pub fn is_anagram(s: String, t: String) -> bool { use std::collections::HashMap; let mut m: HashMap<char, usize> = HashMap::new(); for ch in s.chars() { m.entry(ch).and_modify(|x| *x += 1usize).or_insert(1usize); } for ch in t.chars() { use std::collections::hash_map::Entry; match m.entry(ch) { Entry::Occupied(mut o) => { let x: &mut usize = o.get_mut(); *x -= 1usize; if *x == 0usize { o.remove(); } }, Entry::Vacant(_) => { return false }, } } m.len() == 0 } } }