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
是否不为空,即是否有元素可以进行比较和可能的删除操作。这种使用一个额外的变量来追踪栈顶位置的方法是一种常见的编程技巧,用于在不使用标准栈数据结构的情况下模拟栈的行为。