# 【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++`