# 【LeetCode】 1768. Merge Strings Alternately ## Description > 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. > Constraints: > * `1 <= word1.length, word2.length <= 100` > * `word1` and `word2` consist of lowercase English letters. > 給你兩個字串 `word1` 和 `word2`。從 `word1` 開始,透過交替的順序將字串們合併。如果一個字串比另一個長,將多的字母加到合併字串的尾端。 > 回傳合併後的字串。 > 限制: > * `1 <= word1.length, word2.length <= 100` > * `word1` 和 `word2` 只包含小寫英文字母。 ## Example: ``` 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 ``` ## Solution * 題目給予的限制很少,因此作法很多,以下是不省時間及記憶體,但最直覺的作法: 1. 宣告一個空字串用來放合併字串 * 想省記憶體的話,應該直接在 `word1` 或 `word2` 現有空間操作 2. 依序將 `word1` 和 `word2` 的字母放進去,直到其中一個放完了 * 直接用 for loop 實作即可,判斷式的地方用 And 合併 3. 將多的部分接到合併字串後面 * C++ 提供 string append 函式 * 利用下面的寫法可以不用判斷是哪個字串比較長,因為短字串取出來的會是空字串 * 另一個想法是一開始就先判斷哪個比較長,然後透過交換字串將長字串放到 `word1` * 如果用 C 語言,只需要在一開始宣告一個 `word1.size() + word2.size()` 的 char* 空間即可 ### Code ```C++=1 class Solution { public: string mergeAlternately(string word1, string word2) { string ans; int count; for(count = 0; count < word1.length() && count < word2.length(); count++) { ans.push_back(word1[count]); ans.push_back(word2[count]); } ans.append(word1.begin() + count, word1.end()); ans.append(word2.begin() + count, word2.end()); return ans; } }; ``` ###### tags: `LeetCode` `C++`