easy Remove All Adjacent Duplicates In String
Problem Statement
You are given a string s consisting of lowercase English letters. A duplicate removal consists of choosing two adjacent and equal letters and removing them.
We repeatedly make duplicate removals on s until we no longer can.
Return the final string after all such duplicate removals have been made.
Examples
-
- Input:
s = "abccba" - Output:
"" - Explanation: First, we remove "cc" to get "abba". Then, we remove "bb" to get "aa". Finally, we remove "aa" to get an empty string.
- Input:
-
- Input:
s = "foobar" - Output:
"fbar" - Explanation: We remove "oo" to get "fbar".
- Input:
-
- Input:
s = "fooobar" - Output:
"fobar" - Explanation: We remove the pair "oo" to get "fobar".
- Input:
-
- Input:
s = "abcd" - Output:
"abcd" - Explanation: No adjacent duplicates so no changes.
- Input:
Constraints:
- 1 <= s.length <= 105
sconsists of lowercase English letters.
Try it yourself
Try solving this question here:
✅ Solution Remove All Adjacent Duplicates In String
Problem Statement
You are given a string s consisting of lowercase English letters. A duplicate removal consists of choosing two adjacent and equal letters and removing them.
We repeatedly make duplicate removals on s until we no longer can.
Return the final string after all such duplicate removals have been made.
Examples
-
- Input:
s = "abccba" - Output:
"" - Explanation: First, we remove "cc" to get "abba". Then, we remove "bb" to get "aa". Finally, we remove "aa" to get an empty string.
- Input:
-
- Input:
s = "foobar" - Output:
"fbar" - Explanation: We remove "oo" to get "fbar".
- Input:
-
- Input:
s = "fooobar" - Output:
"fobar" - Explanation: We remove the pair "oo" to get "fobar".
- Input:
-
- Input:
s = "abcd" - Output:
"abcd" - Explanation: No adjacent duplicates so no changes.
- Input:
Constraints:
- 1 <= s.length <= 105
sconsists of lowercase English letters.
Solution
This problem can be solved efficiently using a stack, which can mimic the process of eliminating adjacent duplicates.
Algorithm Walkthrough
- Initialize an empty stack.
- Loop through the characters in the given string
s. - For each character:
- If the stack is not empty and the current character is the same as the top character on the stack, pop the character from the stack.
- Otherwise, push the current character onto the stack.
- Finally, build the result string from the characters remaining on the stack.
Code
Here is the code for this algorithm:
import java.util.Stack;
public class Solution {
public String removeDuplicates(String s) {
// Initialize stack
Stack<Character> stack = new Stack<>();
// Process each character in s
for (char c : s.toCharArray()) {
// If the stack is not empty and the current character is the same as the top of the stack, pop the character from the stack
if (!stack.isEmpty() && c == stack.peek()) {
stack.pop();
} else { // Push the current character onto the stack
stack.push(c);
}
}
// Join the stack to a string
StringBuilder result = new StringBuilder();
for (Character c : stack) {
result.append(c);
}
return result.toString();
}
public static void main(String[] args) {
Solution solution = new Solution();
System.out.println(solution.removeDuplicates("abccba")); // Output: ""
System.out.println(solution.removeDuplicates("foobar")); // Output: "fbar"
System.out.println(solution.removeDuplicates("abcd")); // Output: "abcd"
}
}
Time and Space Complexity
The time complexity of this algorithm is s, because we perform one operation per character in s. The space complexity is also
🤖 Don't fully get this? Learn it with Claude
Stuck on Remove All Adjacent Duplicates In String? 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 **Remove All Adjacent Duplicates In String** (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 **Remove All Adjacent Duplicates In String** 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 **Remove All Adjacent Duplicates In String**. 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 **Remove All Adjacent Duplicates In String**. 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.