diff --git a/src/main.rs b/src/main.rs index a9d800f..9cd62b5 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,34 +1,38 @@ -mod arr; +use std::collections::HashSet; + struct Solution; impl Solution { - pub fn intersection_size_two(intervals: Vec>) -> i32 { - let mut tasks = intervals; - tasks.sort_by_key(|task| task[1]); - let mut stack:Vec> = 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::>(); + let mut set : HashSet = 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; + for i in (0..s.len()).rev() { + if s[i] == c { + end = i; + break; + } } - stack.push(vec![end - d + 1, end,stack[stack.len() - 1][2] + d]); + for i in (start+1)as usize..end { + set.insert(s[i]); + } + ans += set.len() as i32; } - stack[stack.len() - 1][2] + 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); }