impl Solution {
pub fn balanced_string(s: String) -> i32 {
}
}
pub struct Solution;
use std::collections::HashMap;
use std::collections::HashSet;
use std::fmt::Debug;
use std::hash::Hash;
use std::iter::FromIterator;
#[allow(dead_code)]
pub fn print_map<K: Debug + Eq + Hash, V: Debug>(map: &HashMap<K, V>) {
for (k, v) in map.iter() {
println!("{:?}: {:?}", k, v);
}
}
#[allow(dead_code)]
pub fn say_vec(nums: Vec<i32>){
println!("{:?}", nums);
}
#[allow(dead_code)]
pub fn char_frequency(s: String) -> HashMap<char, i32> {
let mut res:HashMap<char, i32> = HashMap::new();
for c in s.chars(){
*res.entry(c).or_insert(0) += 1;
}
res
}
#[allow(dead_code)]
pub fn vec_counter(arr: Vec<i32>) -> HashMap<i32, i32> {
let mut c = HashMap::new();
for n in arr { *c.entry(n).or_insert(0) += 1; }
c
}
#[allow(dead_code)]
pub fn vec_to_hashset(arr: Vec<i32>) -> HashSet<i32> {
HashSet::from_iter(arr.iter().cloned())
}
#[allow(dead_code)]
pub fn int_to_char(n: i32) -> char {
assert!(n >= 0 && n <= 25);
(n as u8 + 'a' as u8) as char
}
#[allow(dead_code)]
fn sayi32(i: i32) {
println!("{}", i);
}
#[allow(dead_code)]
fn sayi32_arr(arr: &Vec<i32>) {
println!("{:?}", arr);
}
#[allow(dead_code)]
pub fn bisect_left(arr: &Vec<i32>, target: i32) -> usize {
let (mut lo, mut hi) = (0, arr.len() - 1);
let mut mid;
while lo < hi {
mid = (lo + hi) >> 1;
if arr[mid as usize] >= target { hi = mid; }
else { lo = mid + 1; }
}
lo
}
#[allow(dead_code)]
pub fn bisect_right(arr: &Vec<i32>, target: i32) -> usize {
let (mut lo, mut hi) = (0, arr.len() - 1);
let mut mid;
while lo < hi {
mid = (lo + hi + 1) >> 1;
if arr[mid as usize] > target { hi = mid - 1; }
else { lo = mid; }
}
if arr[hi] > target { hi } else {hi + 1}
}