diff --git a/src/main.rs b/src/main.rs index 14dda91..9ff8cbd 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,30 +1,38 @@ mod arr; - struct Solution {} +use std::collections::HashSet; impl Solution { - pub fn get_common(nums1: Vec, nums2: Vec) -> i32 { - let (mut a, mut b) = (0,0); - loop { - if nums1[a] == nums2[b] { - return nums1[a]; - } - if nums1[a] < nums2[b] { - a += 1; - if a >= nums1.len() { - break; - } - } else { - b += 1; - if b >= nums2.len() { - break; - } + pub fn longest_common_prefix(arr1: Vec, arr2: Vec) -> i32 { + let mut map = HashSet::new(); + for &x in &arr1 { + let mut x = x; + while x > 0 { + map.insert(x); + x /= 10; } } - -1 + let get_length = |x : i32| -> i32 { + x.to_string().len() as i32 + }; + let mut max_length = 0; + for &x in &arr2 { + let mut x = x; + while x > 0 { + if map.contains(&x) { + max_length = max_length.max(get_length(x)); + break; + } + x /= 10; + } + } + max_length } } fn main() { - println!("{:?}", Solution::get_common(vec![1,2,3,6], vec![2,3,4,5])); + println!( + "{:?}", + Solution::longest_common_prefix(vec![1, 10, 100], vec![1000]) + ); }