# 1768. 交替合并字符串 - LeetCode Python/Java/C++/JS/C#/Go/Ruby 题解 访问原文链接:[1768. 交替合并字符串 - LeetCode Python/Java/C++/JS/C#/Go/Ruby 题解](https://leetcode.blog/zh/leetcode/1768-merge-strings-alternately),体验更佳! 力扣链接:[1768. 交替合并字符串](https://leetcode.cn/problems/merge-strings-alternately), 难度等级:**简单**。 ## LeetCode “1768. 交替合并字符串”问题描述 给你两个字符串 `word1` 和 `word2` 。请你从 `word1` 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。 返回 **合并后的字符串** 。 ### [示例 1] **输入**: `word1 = "abc", word2 = "pqr"` **输出**: `"apbqcr"` **解释**:
The merged string will be merged as so:
word1:  a   b   c
word2:    p   q   r
merged: a p b q c r
### [示例 2] **输入**: `word1 = "ab", word2 = "pqrs"` **输出**: `"apbqrs"` **解释**:
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
### [示例 3] **输入**: `word1 = "abcd", word2 = "pq"` **输出**: `"apbqcd"` **解释**:
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
### [约束] - `1 <= word1.length, word2.length <= 100` - `word1` 和 `word2` 由小写英文字母组成 ### [Hints]
提示 1 Use two pointers, one pointer for each string. Alternately choose the character from each pointer, and move the pointer upwards.
## 思路 这个问题要求我们合并两个字符串 `word1` 和 `word2`,方法是交替选取字符,从 `word1` 开始。如果一个字符串比另一个长,那么较长字符串中多余的字符应该追加到合并结果的末尾。 核心思路是同时遍历两个字符串,从 `word1` 中取一个字符,然后从 `word2` 中取一个字符,并将它们添加到我们的结果中。只要两个字符串中都还有可用的字符,这个过程就会继续。 一旦较短字符串的字符用完,我们就简单地从较长字符串中取出所有剩余的字符,并将它们追加到我们的结果中。 ## 步骤 1. 初始化一个空字符串(或字符列表、字符串构建器)来存储合并后的结果。 2. 确定 `word1` 和 `word2` 的长度。设它们分别为 `n1` 和 `n2`。 3. 找出这两个长度中的较小值,称其为 `min_len = min(n1, n2)`。这个 `min_len` 是我们可以从两个字符串中交替选取的字符数。 4. 从 `i = 0` 迭代到 `min_len - 1`: * 将 `word1` 的第 `i` 个字符追加到结果中。 * 将 `word2` 的第 `i` 个字符追加到结果中。 5. 循环结束后,我们已经处理了两个字符串中的 `min_len` 个字符。 6. 确定哪个字符串可能有多余的字符。设其为 `longer_word`。 * 如果 `word1` 的长度 (`n1`) 大于 `min_len`,则 `longer_word` 是 `word1`。 * 否则,`longer_word` 是 `word2`。 7. 将 `longer_word` 的剩余部分(即从索引 `min_len` 开始的 `longer_word`)追加到 `result` 中。8. 返回最终合并的字符串。 ## 复杂度 - 时间复杂度: `O(N)`. - 空间复杂度: `O(N)`. ## Python ```python class Solution: def mergeAlternately(self, word1: str, word2: str) -> str: min_size = min(len(word1), len(word2)) result = "" for i in range(min_size): result += f'{word1[i]}{word2[i]}' longer_word = word1 if len(word1) > min_size else word2 return result + longer_word[min_size:] ``` ## Java ```java class Solution { public String mergeAlternately(String word1, String word2) { int minSize = Math.min(word1.length(), word2.length()); StringBuilder result = new StringBuilder(); for (int i = 0; i < minSize; i++) { result.append(word1.charAt(i)).append(word2.charAt(i)); } String longerWord = (word1.length() > word2.length()) ? word1 : word2; result.append(longerWord.substring(minSize)); return result.toString(); } } ``` ## C++ ```cpp class Solution { public: string mergeAlternately(string word1, string word2) { int min_size = min(word1.length(), word2.length()); string result; for (int i = 0; i < min_size; ++i) { result += word1[i]; result += word2[i]; } auto& longer_word = (word1.length() > min_size) ? word1 : word2; result += longer_word.substr(min_size); return result; } }; ``` ## JavaScript ```javascript var mergeAlternately = function(word1, word2) { const minSize = Math.min(word1.length, word2.length); let result = ""; for (let i = 0; i < minSize; i++) { result += word1[i] + word2[i]; } const longerWord = word1.length > word2.length ? word1 : word2; result += longerWord.slice(minSize); return result; }; ``` ## Go ```go func mergeAlternately(word1, word2 string) string { minSize := int(math.Min(float64(len(word1)), float64(len(word2)))) var result strings.Builder for i := 0; i < minSize; i++ { result.WriteByte(word1[i]) result.WriteByte(word2[i]) } longerWord := word1 if len(word2) > len(word1) { longerWord = word2 } result.WriteString(longerWord[minSize:]) return result.String() } ``` ## C# ```csharp public class Solution { public string MergeAlternately(string word1, string word2) { int minSize = Math.Min(word1.Length, word2.Length); var result = new StringBuilder(); for (int i = 0; i < minSize; i++) result.Append(word1[i]).Append(word2[i]); string longerWord = word1.Length > word2.Length ? word1 : word2; result.Append(longerWord.Substring(minSize)); return result.ToString(); } } ``` ## Ruby ```ruby def merge_alternately(word1, word2) min_size = [ word1.size, word2.size ].min result = "" min_size.times { |i| result << word1[i] << word2[i] } longer_word = word1.size > word2.size ? word1 : word2 result << longer_word[min_size..] result end ``` ## Other languages ```java // Welcome to create a PR to complete the code of this language, thanks! ``` 亲爱的力扣人,为了您更好的刷题体验,请访问 [LeetCode.blog](https://leetcode.blog/zh)。 本站敢称力扣题解最佳实践,终将省你大量刷题时间! 原文链接:[1768. 交替合并字符串 - LeetCode Python/Java/C++/JS/C#/Go/Ruby 题解](https://leetcode.blog/zh/leetcode/1768-merge-strings-alternately). GitHub 仓库: [leetcode-python-java](https://github.com/leetcode-python-java/leetcode-python-java).