题目要求:
给你两个字符串 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…
代码:
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
}