leetcode_rust/
longest_common_prefix.rs

1#![allow(dead_code)]
2
3// todo: there are some other solutions
4pub fn longest_common_prefix(strs: Vec<String>) -> String {
5    let mut common = String::new();
6    if strs.len() == 0 {
7        return common;
8    } else if strs.len() == 1 {
9        return strs[0].clone();
10    }
11
12    let mut k: usize = 0;
13    loop {
14        let cur_ch: char;
15        match strs[0].chars().nth(k) {
16            None => {
17                return common;
18            }
19            Some(ch) => {
20                cur_ch = ch;
21            }
22        };
23
24        for i in 1..strs.len() {
25            match strs[i].chars().nth(k) {
26                Some(ch) if cur_ch == ch => {}
27                _ => return common,
28            }
29        }
30
31        common.push(cur_ch);
32        k += 1;
33    }
34}
35
36#[cfg(test)]
37mod tests {
38    use super::*;
39
40    #[test]
41    fn test1() {
42        let strs = vec![
43            String::from("flower"),
44            String::from("flow"),
45            String::from("flight"),
46        ];
47
48        assert_eq!(longest_common_prefix(strs), String::from("fl"));
49        assert_eq!(longest_common_prefix(vec![]), String::from(""));
50        assert_eq!(
51            longest_common_prefix(vec![String::from("flower")]),
52            String::from("flower")
53        );
54    }
55}