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
-
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.
- Input: word1:
-
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.
- Input: word1:
-
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.
- Input: word1:
Try it yourself
Try solving this question here:
✅ 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.
- Input: word1:
-
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.
- Input: word1:
-
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.
- Input: word1:
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
resultto 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.
- Append the current character from the first string to
- After completing the alternating merge, check if any string has remaining characters. Append the remaining characters from the longer string to
result. - Return the
resultstring.
Algorithm Walkthrough
Consider the input: word1: "abc", word2: "xyz123"
-
Initialize Variables:
resultis an empty string where the merged output will be stored.- Determine the length of the shorter string. In this case,
word1has a length of 3, andword2has a length of 6. So, the length of the shorter string is 3.
-
Start Looping Through Both Strings:
- For
i = 0(first iteration):- Append the first character of
word1("a") toresult. Now,result= "a". - Append the first character of
word2("x") toresult. Now,result= "ax".
- Append the first character of
- For
i = 1(second iteration):- Append the second character of
word1("b") toresult. Now,result= "axb". - Append the second character of
word2("y") toresult. Now,result= "axby".
- Append the second character of
- For
i = 2(third iteration):- Append the third character of
word1("c") toresult. Now,result= "axbyc". - Append the third character of
word2("z") toresult. Now,result= "axbycz".
- Append the third character of
- For
-
Check for Remaining Characters:
- At this point,
word1is fully iterated through, butword2still has characters left ("123"). - Since
word1is shorter and fully merged, we append the remaining characters ofword2toresult. Now,result= "axbycz123".
- At this point,
-
Return the Result:
- The final merged string is "axbycz123", which is stored in
result. - Return
result.
- The final merged string is "axbycz123", which is stored in
Code
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.
🤖 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.
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.
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.
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.
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.