summaryrefslogtreecommitdiffstats
path: root/src/bin/1768-merge-strings-alternately.rs
blob: aaa3fcdf2f8a748b5d0977e5a863939b04c0c897 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/// 1768. Merge Strings Alternately (Easy)
///
/// You are given two strings word1 and word2. Merge the strings by adding
/// letters in alternating order, starting with word1. If a string is longer
/// than the other, append the additional letters onto the end of the merged
/// string.
///
/// Return the merged string.
///
/// *Example 1:*
///
///   *Input:* word1 = "abc", word2 = "pqr"
///   *Output:* "apbqcr"
///   *Explanation:* The merged string will be merged as so:
///   word1:  a   b   c
///   word2:    p   q   r
///   merged: a p b q c r
///
/// *Example 2:*
///
///   *Input:* word1 = "ab", word2 = "pqrs"
///   *Output:* "apbqrs"
///   *Explanation:* Notice that as word2 is longer, "rs" is appended to the end.
///   word1:  a   b
///   word2:    p   q   r   s
///   merged: a p b q   r   s
///
/// *Example 3:*
///
///   *Input:* word1 = "abcd", word2 = "pq"
///   *Output:* "apbqcd"
///   *Explanation:* Notice that as word1 is longer, "cd" is appended to the end.
///   word1:  a   b   c   d
///   word2:    p   q
///   merged: a p b q c   d
///
/// *Constraints:*
///
///   * 1 <= word1.length, word2.length <= 100
///   * word1 and word2 consist of lowercase English letters.
///
use leetcode::*;

struct Solution {}

impl Solution {
    pub fn merge_alternately(word1: String, word2: String) -> String {
        let mut out = Vec::with_capacity(word1.len() + word2.len());
        let mut word1 = word1.chars().peekable();
        let mut word2 = word2.chars().peekable();
        while word1.peek().is_some() || word2.peek().is_some() {
            if let Some(c) = word1.next() {
                out.push(c);
            }
            if let Some(c) = word2.next() {
                out.push(c)
            }
        }
        out.into_iter().collect()
    }
}

pub fn main() {
    println!("{}", Solution::merge_alternately(arg(1), arg(2)))
}

#[cfg(test)]
mod tests {
    use crate::Solution;

    #[test]
    fn test() {
        assert_eq!(
            Solution::merge_alternately("abc".to_string(), "pqr".to_string()),
            "apbqcr".to_string()
        );
        assert_eq!(
            Solution::merge_alternately("ab".to_string(), "pqrs".to_string()),
            "apbqrs".to_string()
        );
        assert_eq!(
            Solution::merge_alternately("abcd".to_string(), "pq".to_string()),
            "apbqcd".to_string()
        );
    }
}