1930. 长度为 3 的不同回文子序列
This commit is contained in:
parent
67d79e3553
commit
4b8594e8e3
52
src/main.rs
52
src/main.rs
|
|
@ -1,34 +1,38 @@
|
|||
mod arr;
|
||||
use std::collections::HashSet;
|
||||
|
||||
struct Solution;
|
||||
impl Solution {
|
||||
pub fn intersection_size_two(intervals: Vec<Vec<i32>>) -> i32 {
|
||||
let mut tasks = intervals;
|
||||
tasks.sort_by_key(|task| task[1]);
|
||||
let mut stack:Vec<Vec<i32>> = Vec::new();
|
||||
stack.push(vec![-2,-2,0]);
|
||||
for task in tasks.iter() {
|
||||
let start = task[0];
|
||||
let end = task[1];
|
||||
let mut d = 2;
|
||||
let pos = stack.partition_point(|x| x[0] < start) - 1;
|
||||
d -= stack[stack.len() - 1][2] - stack[pos][2];
|
||||
if start <= stack[pos][1] {
|
||||
d -= stack[pos][1] - start + 1;
|
||||
pub fn count_palindromic_subsequence(s: String) -> i32 {
|
||||
let mut ans = 0;
|
||||
let s = s.bytes().collect::<Vec<u8>>();
|
||||
let mut set : HashSet<u8> = HashSet::new();
|
||||
for c in b'a'..=b'z' {
|
||||
set.clear();
|
||||
let (mut start,mut end) = (-1,0);
|
||||
for i in 0..s.len() {
|
||||
if s[i] == c {
|
||||
start = i as i32;
|
||||
break;
|
||||
}
|
||||
if d <= 0{
|
||||
}
|
||||
if start == -1 {
|
||||
continue;
|
||||
}
|
||||
while end - stack[stack.len() - 1][1] <= d {
|
||||
let end = stack.pop().unwrap();
|
||||
d += end[1] - end[0] + 1;
|
||||
}
|
||||
stack.push(vec![end - d + 1, end,stack[stack.len() - 1][2] + d]);
|
||||
}
|
||||
stack[stack.len() - 1][2]
|
||||
for i in (0..s.len()).rev() {
|
||||
if s[i] == c {
|
||||
end = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for i in (start+1)as usize..end {
|
||||
set.insert(s[i]);
|
||||
}
|
||||
ans += set.len() as i32;
|
||||
}
|
||||
ans
|
||||
}
|
||||
}
|
||||
|
||||
fn main() {
|
||||
let result = Solution::intersection_size_two(arr::make_matrix("[[1,3],[3,7],[8,9]]"));
|
||||
let result = Solution::count_palindromic_subsequence(String::from("bbcbaba"));
|
||||
println!("{:?}", result);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue