#给你两个字符串 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
/**
* 支持 import Java 标准库 (JDK 1.8)
*/
import java.util.*;
/**
* 注意:目前 Java 代码的入口类名称必须为 Main(大小写敏感)
*/
public class Main {
public static void main(String []args) {
System.out.println(mergeAlternately01("ace","bdfggg"));
System.out.println(mergeAlternately02("ace","bdfggg"));
System.out.println(mergeAlternately03("ace","bdfggg"));
}
/**
使用双指针,分别遍历两个字符串
时间复杂度O(max(word1.length() , word1.length()))
空间复杂度O(word1.length() + word1.length())
*/
public static String mergeAlternately01(String word1, String word2) {
int l1 = word1.length();
int l2 = word2.length();
int min = Math.min(l1,l2);
StringBuilder sb = new StringBuilder();
int i=0,j=0;
while(i < l1 || j < l2){
if(i < l1){
sb = sb.append(word1.charAt(i++));
}
if(j < l2){
sb = sb.append(word2.charAt(j++));
}
}
return sb.toString();
}
/**
使用单指针,分别遍历两个字符串
时间复杂度O(max(word1.length() , word1.length()))
空间复杂度O(word1.length() + word1.length())
*/
public static String mergeAlternately02(String word1, String word2) {
int l1 = word1.length();
int l2 = word2.length();
int min = Math.min(l1,l2);
StringBuilder sb = new StringBuilder();
int i=0,j=0;
while(i < l1 || i < l2){
if(i < l1){
sb = sb.append(word1.charAt(i));
}
if(i < l2){
sb = sb.append(word2.charAt(i));
}
i++;
}
return sb.toString();
}
/**
1 先合并相同长度的部分
2 拼接多余部分
时间复杂度O(Math.min(word1.length(),word1.length()))
空间复杂度O(word1.length() + word1.length())
*/
public static String mergeAlternately03(String word3, String word4) {
int l1 = word3.length();
int l2 = word4.length();
int min = Math.min(l1,l2);
StringBuilder sb = new StringBuilder();
for(int i = 0; i < min; ++i){
sb = sb.append(word3.charAt(i)).append(word4.charAt(i));
}
if(l1 == l2) return sb.toString();
sb = l1 > min ? sb.append(word3.substring(min)) : sb.append(word4.substring(min)) ;
return sb.toString();
}
}
[jcode](https://code.juejin.cn/pen/7256934518672588857)