栈最典型的应用就是验证配对情况,注意事项:栈在peek(查看堆栈顶部的对象,但不从堆栈中移除它)、pop(移除堆栈顶部的对象,并作为此函数的值返回该对象)操作前都要验证非空,否则会报错StatckEmptyException。
栈的方法:
E push(E item) 把项压入堆栈顶部。
E pop() 移除堆栈顶部的对象,并作为此函数的值返回该对象。
E peek() 查看堆栈顶部的对象,但不从堆栈中移除它。
boolean empty() 测试堆栈是否为空。
int search(Object o) 返回对象在堆栈中的位置,以 1 为基数。
-------------------------------------------------分割线-----------------------------------------------------
class Solution {
public boolean isValid(String s) {
//验证符号是否成对出现
if(s.length() % 2 != 0) return false;
Stack<Character> stack = new Stack<Character>();
for(char c : s.toCharArray()){
if(c == '('){
stack.push(')');
}else if(c == '{'){
stack.push('}');
}else if(c == '['){
stack.push(']');
}else if(stack.empty() || stack.pop() != c){
return false;
}
}
return stack.empty();
}
}
总结:主要在stack.isEmpty() || stack.pop() != c中,当输入“()”时,‘(’入栈,当‘)’时,先判断当前栈是否为空,返回false,然后栈顶移除字符,当字符与‘)’不相同时返回false,循环结束,返回最后结果。我是看LeetCode答案了,要不然我写不出来,这道题挺好的,让我了解了Stack,并进行使用