CMD Guide
HomeDSACompany Practice

easy Merge Strings Alternately

Problem Statement

Given two strings, word1 and word2, return the merged string after merging each character of both strings in alternate order, starting with the word1. If one string is longer than the other, append the remaining characters of the longer string to the end of the merged string.

Examples

Try it yourself

Try solving this question here:

🎯 STRICT STANDOUT — Merge Strings Alternately — problem

1. Why / judgment

Two-pointer zip of characters; drain the longer tail. Pattern: merge like merge-step of merge-sort but on strings with unequal lengths.

2. Big-O derivation (K11)

O(|a|+|b|) time/space for output.
Cannot do better — must write all chars.

3. Pattern + when-NOT (K12)

Name: TWO POINTER INTERLEAVE MERGE

Recognition: alternate characters from two strings.

When-NOT: Merge sorted arrays by value → compare heads. Zip shortest only discard tail → different API. In-place array interleave harder.

4. Edge hand-run (K13)

one empty → other full.
equal lengths pure alternate.
a longer / b longer tails.

5. Interviewer follow-ups (model answers)

Q1. Index vs iterators?
A: Either; single i and slice remainders fine.

Q2. Unicode code points vs bytes?
A: Language string model.

Q3. Thread safety?
A: N/A pure function.

6. Short drills

Drill: "abc","pqr" → apbqcr.
Drill: "ab","pqrs" → apbqrs.
✅ Solution Merge Strings Alternately

Problem Statement

Given two strings, word1 and word2, return the merged string after merging each character of both strings in alternate order, starting with the word1. If one string is longer than the other, append the remaining characters of the longer string to the end of the merged string.

Examples

  • Example 1:

    • Input: word1: "dog", word2: "cat"
    • Expected Output: "dcoagt"
    • Justification: The characters from both strings are alternated, starting with the first character of the first string. Since both strings are of equal length, no extra characters remain at the end.
  • Example 2:

    • Input: word1: "hello", word2: "hi"
    • Expected Output: "hheillo"
    • Justification: After alternating characters from both strings, the remaining characters from the longer string ("hello") are appended to the end.
  • Example 3:

    • Input: word1: "abc", word2: "xyz123"
    • Expected Output: "axbycz123"
    • Justification: Characters are alternated, and since the second string is longer, the remaining characters ("123") are appended to the end.

Solution

To solve this problem, we'll iterate over both strings simultaneously, appending one character from each string to the result until we reach the end of one of the strings. This approach ensures that characters are merged in an alternating fashion, preserving the order from both input strings. After completing the alternating merge, if one string is longer, we append the remaining characters of the longer string to the merged result. This method is effective because it directly addresses the problem's requirements with a straightforward iteration, making it easy to understand and implement. By iterating over the strings simultaneously, we minimize the time complexity, ensuring that each character is visited only once, which makes the algorithm efficient for strings of varying lengths.

Step-by-Step Algorithm

  • Initialize an empty string result to store the merged output.
  • Determine the length of the shorter string to ensure the alternating merge doesn't exceed the shorter string's length.
  • Use a loop to iterate through both strings up to the length of the shorter string. During each iteration:
    • Append the current character from the first string to result.
    • Append the current character from the second string to result.
  • After completing the alternating merge, check if any string has remaining characters. Append the remaining characters from the longer string to result.
  • Return the result string.

Algorithm Walkthrough

Consider the input: word1: "abc", word2: "xyz123"

  1. Initialize Variables:

    • result is an empty string where the merged output will be stored.
    • Determine the length of the shorter string. In this case, word1 has a length of 3, and word2 has a length of 6. So, the length of the shorter string is 3.
  2. Start Looping Through Both Strings:

    • For i = 0 (first iteration):
      • Append the first character of word1 ("a") to result. Now, result = "a".
      • Append the first character of word2 ("x") to result. Now, result = "ax".
    • For i = 1 (second iteration):
      • Append the second character of word1 ("b") to result. Now, result = "axb".
      • Append the second character of word2 ("y") to result. Now, result = "axby".
    • For i = 2 (third iteration):
      • Append the third character of word1 ("c") to result. Now, result = "axbyc".
      • Append the third character of word2 ("z") to result. Now, result = "axbycz".
  3. Check for Remaining Characters:

    • At this point, word1 is fully iterated through, but word2 still has characters left ("123").
    • Since word1 is shorter and fully merged, we append the remaining characters of word2 to result. Now, result = "axbycz123".
  4. Return the Result:

    • The final merged string is "axbycz123", which is stored in result.
    • Return result.

Code

java
public class Solution {

  // Method to merge two strings alternately
  public String mergeAlternately(String word1, String word2) {
    StringBuilder result = new StringBuilder(); // StringBuilder to store the result
    int minLength = Math.min(word1.length(), word2.length()); // Determine the shorter string length
    // Loop through both strings up to the length of the shorter string
    for (int i = 0; i < minLength; i++) {
      result.append(word1.charAt(i)); // Append character from word1
      result.append(word2.charAt(i)); // Append character from word2
    }
    // Append remaining characters from the longer string, if any
    if (word1.length() > minLength) {
      result.append(word1.substring(minLength));
    } else if (word2.length() > minLength) {
      result.append(word2.substring(minLength));
    }
    return result.toString(); // Convert StringBuilder to String and return
  }

  // Main method to test the algorithm with example inputs
  public static void main(String[] args) {
    Solution solution = new Solution();
    System.out.println(solution.mergeAlternately("dog", "cat")); // Example 1
    System.out.println(solution.mergeAlternately("hello", "hi")); // Example 2
    System.out.println(solution.mergeAlternately("abc", "xyz123")); // Example 3
  }
}

Complexity Analysis

  • Time Complexity: , where N is the length of the first string and M is the length of the second string. This is because the algorithm iterates through both strings once.

  • Space Complexity:| , due to the storage requirements for the resulting string which combines characters from both input strings.

🎯 STRICT STANDOUT — Solution Merge Strings Alternately

1. Why / judgment

Builder; for i in range(min): append a[i],b[i]; append a[min:], b[min:]. Correct length sum.

2. Big-O derivation (K11)

O(n+m).
Trace "","xyz" → xyz.
Trace "a","" → a.

3. Pattern + when-NOT (K12)

Name: ZIP + TAIL

Recognition: alternate merge.

When-NOT: More than two strings → round-robin queues.

4. Edge hand-run (K13)

single chars.

5. Interviewer follow-ups (model answers)

Q1. Preallocate size?
A: Yes |a|+|b| capacity.

Q2. Immutable + ?
A: Avoid quadratic + in loop; use list join.

Q3. Null inputs?
A: Problem gives strings.

6. Short drills

Drill: implement with two indices without slices.
Drill: unit tests both tails.
🧩 Pattern · Arrays

Recognize it: Scan once tracking what you need (running max/sum), or precompute a prefix-sum / hash → turn O(n²) into O(n).

▶ Visualize this problem (step it, predict each fork)
⛶ Open this problem debugger in explore mode
🤖 Don't fully get this? Learn it with Claude

Stuck on Merge Strings Alternately? Open Claude, copy a block below, and it'll teach you this exact concept — visually and interactively.

🪜 Hint ladder (no spoilers)

Progressively stronger hints — you still solve it.

I'm working on the problem **Merge Strings Alternately** (DSA). Give me a HINT LADDER: start with the tiniest nudge, then wait. Only reveal the next, stronger hint when I ask. Do NOT show the full solution unless I type 'show solution'. Keep me doing the thinking. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🎨 Explain the approach visually

See the technique, not just code.

Explain the optimal approach to **Merge Strings Alternately** with a VISUAL walkthrough: trace it on a small concrete example using ASCII art / a step-by-step diagram, narrate what changes each step, then give time & space complexity with a one-line derivation. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔍 Review my solution

Catch bugs, edge cases, sub-optimality.

I'll paste my solution to **Merge Strings Alternately**. Review it for correctness, missed edge cases, and time/space complexity, then coach me toward the optimal — don't just rewrite it. Ask me to paste my code now. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.
🔁 Drill the pattern

Lock in recognition with look-alikes.

Give me 2 problems that use the SAME underlying pattern as **Merge Strings Alternately**. For each, let me attempt first, then review my answer and name the trigger signal that reveals the pattern. If you're unsure or a claim isn't standard, say so and reason from first principles instead of guessing.

📝 My notes