2025-07-10 14:13:01 +08:00
|
|
|
struct Solution;
|
|
|
|
impl Solution {
|
2025-09-06 15:41:02 +08:00
|
|
|
pub fn find_anagrams(s: String, p: String) -> Vec<i32> {
|
|
|
|
if s.len() < p.len() {
|
|
|
|
return vec![];
|
|
|
|
}
|
|
|
|
let mut res = vec![];
|
|
|
|
let mut p_count = [0; 26];
|
|
|
|
let mut s_count = [0; 26];
|
|
|
|
for i in 0..p.len() {
|
|
|
|
p_count[(p.as_bytes()[i] - b'a') as usize] += 1;
|
|
|
|
}
|
|
|
|
for i in 0..p.len() {
|
|
|
|
s_count[(s.as_bytes()[i] - b'a') as usize] += 1;
|
|
|
|
}
|
|
|
|
for i in p.len()..s.len() {
|
|
|
|
if p_count == s_count {
|
|
|
|
res.push((i - p.len()) as i32);
|
2025-09-05 11:41:56 +08:00
|
|
|
}
|
2025-09-06 15:41:02 +08:00
|
|
|
s_count[(s.as_bytes()[i] - b'a') as usize] += 1;
|
|
|
|
s_count[(s.as_bytes()[i - p.len()] - b'a') as usize] -= 1;
|
|
|
|
}
|
|
|
|
if p_count == s_count {
|
|
|
|
res.push((s.len() - p.len()) as i32);
|
2025-09-05 11:41:56 +08:00
|
|
|
}
|
2025-09-06 15:41:02 +08:00
|
|
|
res
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
2025-09-06 15:41:02 +08:00
|
|
|
let sl = Solution::find_anagrams("cbaebabacd".to_string(), "abc".to_string());
|
2025-07-29 11:20:14 +08:00
|
|
|
println!("{:?}", sl);
|
2025-07-10 14:13:01 +08:00
|
|
|
}
|