返回介绍

solution / 1700-1799 / 1768.Merge Strings Alternately / README_EN

发布于 2024-06-17 01:03:14 字数 5059 浏览 0 评论 0 收藏 0

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

 

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.

Solutions

Solution 1: Direct Simulation

We traverse the two strings word1 and word2, take out the characters one by one, and append them to the result string. The Python code can be simplified into one line.

The time complexity is $O(m + n)$, where $m$ and $n$ are the lengths of the two strings respectively. Ignoring the space consumption of the answer, the space complexity is $O(1)$.

class Solution:
  def mergeAlternately(self, word1: str, word2: str) -> str:
    return ''.join(a + b for a, b in zip_longest(word1, word2, fillvalue=''))
class Solution {
  public String mergeAlternately(String word1, String word2) {
    int m = word1.length(), n = word2.length();
    StringBuilder ans = new StringBuilder();
    for (int i = 0; i < m || i < n; ++i) {
      if (i < m) {
        ans.append(word1.charAt(i));
      }
      if (i < n) {
        ans.append(word2.charAt(i));
      }
    }
    return ans.toString();
  }
}
class Solution {
public:
  string mergeAlternately(string word1, string word2) {
    int m = word1.size(), n = word2.size();
    string ans;
    for (int i = 0; i < m || i < n; ++i) {
      if (i < m) ans += word1[i];
      if (i < n) ans += word2[i];
    }
    return ans;
  }
};
func mergeAlternately(word1 string, word2 string) string {
  m, n := len(word1), len(word2)
  ans := make([]byte, 0, m+n)
  for i := 0; i < m || i < n; i++ {
    if i < m {
      ans = append(ans, word1[i])
    }
    if i < n {
      ans = append(ans, word2[i])
    }
  }
  return string(ans)
}
function mergeAlternately(word1: string, word2: string): string {
  const ans: string[] = [];
  const [m, n] = [word1.length, word2.length];
  for (let i = 0; i < m || i < n; ++i) {
    if (i < m) {
      ans.push(word1[i]);
    }
    if (i < n) {
      ans.push(word2[i]);
    }
  }
  return ans.join('');
}
impl Solution {
  pub fn merge_alternately(word1: String, word2: String) -> String {
    let s1 = word1.as_bytes();
    let s2 = word2.as_bytes();
    let n = s1.len().max(s2.len());
    let mut res = vec![];
    for i in 0..n {
      if s1.get(i).is_some() {
        res.push(s1[i]);
      }
      if s2.get(i).is_some() {
        res.push(s2[i]);
      }
    }
    String::from_utf8(res).unwrap()
  }
}
char* mergeAlternately(char* word1, char* word2) {
  int m = strlen(word1);
  int n = strlen(word2);
  char* ans = malloc(sizeof(char) * (n + m + 1));
  int i = 0;
  int j = 0;
  while (i + j != m + n) {
    if (i < m) {
      ans[i + j] = word1[i];
      i++;
    }
    if (j < n) {
      ans[i + j] = word2[j];
      j++;
    }
  }
  ans[n + m] = '\0';
  return ans;
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文