class Solution {
public String removeDuplicates(String S) {
StringBuffer stack = new StringBuffer();
int top = -1;
for (int i = 0; i < S.length(); ++i) {
char ch = S.charAt(i);
if (top >= 0 && stack.charAt(top) == ch) {
stack.deleteCharAt(top);
--top;
} else {
stack.append(ch);
++top;
}
}
return stack.toString();
}
}变量 top 被用来追踪 StringBuffer(在这里充当栈的角色)的栈顶位置。这里的逻辑是:
- 当
stack(StringBuffer实例)为空时,意味着没有任何元素被添加进去。在这种情况下,top的值为-1。这是因为在空的StringBuffer中,没有任何字符的索引可以是0或更大的数(在Java中,索引通常是从0开始的)。因此,-1被用作表示“栈空”或“没有元素”的标记。 - 当向
stack中添加第一个元素时,top的值从-1变为0,表示现在有一个元素在stack中,且这个元素位于索引0的位置(也就是栈顶)。 - 因此,如果
top的值大于或等于0,意味着stack中至少有一个元素,即stack不为空。相反,如果top的值仍然是-1,则意味着stack为空。
top >= 0 的条件用来检查 stack 是否不为空,即是否有元素可以进行比较和可能的删除操作。这种使用一个额外的变量来追踪栈顶位置的方法是一种常见的编程技巧,用于在不使用标准栈数据结构的情况下模拟栈的行为。









