leetcode-1768. 交替合并字符串

95 阅读2分钟

题目要求:

给你两个字符串 word1 和 word2 。请你从 word1 开始,通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长,就将多出来的字母追加到合并后字符串的末尾。

返回 合并后的字符串

示例 1:
输入:word1 = "abc", word2 = "pqr"
输出:"apbqcr"
解释:字符串合并情况如下所示:
word1: a b c
word2: p q r
合并后: a p b q c r

示例 2:
输入:word1 = "ab", word2 = "pqrs"
输出:"apbqrs"
解释:注意,word2 比 word1 长,"rs" 需要追加到合并后字符串的末尾。
word1: a b
word2: p q r s
合并后: a p b q r s

示例 3:
输入:word1 = "abcd", word2 = "pq"
输出:"apbqcd"
解释:注意,word1 比 word2 长,"cd" 需要追加到合并后字符串的末尾。
word1: a b c d
word2: p q
合并后: a p b q c d

链接:leetcode.cn/problems/me…

解题思路

第一种思路:直接遍历字符串做拼接
具体可参考题解:leetcode.cn/problems/me…

代码

func mergeAlternately(word1 string, word2 string) string {
	// 创建临时变量,获取字符串长度
	var result string
	lenOfWord1 := len(word1)
	lenOfWord2 := len(word2)
	// 按照最小的子字符串做拼接
	// 把长的字符串的后缀追加进来
	if lenOfWord1 >= lenOfWord2 {
		for i, v := range word2 {
			result += string(word1[i])
			result += string(v)
		}
		result += word1[lenOfWord2:]
	} else {
		for i, v := range word1 {
			result += string(v)
			result += string(word2[i])
		}
		result += word2[lenOfWord1:]
	}
	// 返回可临时变量
	return result
}

第二种思路:双指针
使用两个指针分别指向word1和word2,每次移动一个位置,将移动的字符拼接起来,直到遍历完成两个word。

代码如下

func mergeAlternately(word1 string, word2 string) string {
	// 双指针
	m, n := 0, 0
	var result string
	for m < len(word1) || n < len(word2) {
		if m < len(word1) {
			result += string(word1[m])
			m += 1
		}
		if n < len(word2) {
			result += string(word2[n])
			n += 1
		}
	}
	return result
}