438. 找到字符串中所有字母异位词
This commit is contained in:
parent
54f6c3f08b
commit
56e2221c76
48
src/main.rs
48
src/main.rs
|
@ -1,33 +1,33 @@
|
|||
use std::cmp::max;
|
||||
|
||||
struct Solution;
|
||||
impl Solution {
|
||||
pub fn min_operations(queries: Vec<Vec<i32>>) -> i64 {
|
||||
let mut ans: i64 = 0;
|
||||
let splits = vec![0,1,4,16,64,256,1024,4096,16384,65536,262144,1048576,4194304,16777216,67108864,268435456,1073741824];
|
||||
for query in queries {
|
||||
let l = query[0];
|
||||
let r = query[1];
|
||||
let mut local_ans:i64 = 0;
|
||||
for i in 1..splits.len() {
|
||||
let split = splits[i];
|
||||
if split < l {
|
||||
continue;
|
||||
}
|
||||
let left = max(l, splits[i-1]);
|
||||
if split > r {
|
||||
local_ans += (r - left + 1) as i64 * (i-1) as i64;
|
||||
break;
|
||||
}
|
||||
local_ans += (split - left ) as i64 * (i-1) as i64;
|
||||
}
|
||||
ans += local_ans / 2 + local_ans % 2;
|
||||
pub fn find_anagrams(s: String, p: String) -> Vec<i32> {
|
||||
if s.len() < p.len() {
|
||||
return vec![];
|
||||
}
|
||||
ans
|
||||
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);
|
||||
}
|
||||
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);
|
||||
}
|
||||
res
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let sl = Solution::min_operations(vec![vec![1,2],vec![2,4]]);
|
||||
let sl = Solution::find_anagrams("cbaebabacd".to_string(), "abc".to_string());
|
||||
println!("{:?}", sl);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue