LeetCode 数组字符串-01(交替合并字符串)

156 阅读1分钟

#给你两个字符串 word1word2 。请你从 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)