Merge Strings Alternately

// Merge Strings Alternately.
// https://leetcode.com/problems/merge-strings-alternately

// 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.

// Ex1: 
// 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

// Ex2:
// 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

// Ex3:
// 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

#include <string>
#include <iostream>
#include <cassert>
using namespace std;

// Time complexity: O(m+n)
// Space complexity: O(1)
string mergeAlternately(string word1, string word2) {
    if (word1.empty() || word2.empty()) {
        return word1 + word2;
    }

    int i = 0, j = 0;
    int m = word1.size(), n = word2.size();

    string res = "";
    while (i < m && j < n) {
        res += word1[i++];
        res += word2[j++];
    }

    while (i < m) {
        res += word1[i++];
    }

    while (j < n) {
        res += word2[j++];
    }

    return res;
}


int main() {
    assert(mergeAlternately("abc", "pqr") == "apbqcr");
    assert(mergeAlternately("ab", "pqrs") == "apbqrs");
    assert(mergeAlternately("abcd", "pq") == "apbqcd");

    return 0;
}```

Last updated