题目描述:
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 判断字符串是否有效
有效字符串需满足:
1.左括号必须用相同类型的右括号闭合
2.左括号必须以正确的顺序闭合
3.注意空字符串可被认为是有效字符串
思路:
- 扫描整个字符串 遇到左括号就将其入栈 遇到右括号时就将栈顶元素取出并进行配对 若配对成功 则继续往右扫描 否则返回false
- 遇到右括号时需要先判断栈中是否有元素 即是否有左括号
- 最后需要判断栈是否为空 即是否每个左括号都有右括号配对
源代码:
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<Character>();
for(char c : s.toCharArray()){
if(c == '(' || c == '{' || c == '['){
stack.push(c);
}
if(c == ')'){
if(stack.empty())
return false;
char m = stack.pop();
if(m != '(') return false;
}
if(c == '}'){
if(stack.empty())
return false;
char m = stack.pop();
if(m != '{') return false;
}
if(c == ']'){
if(stack.empty())
return false;
char m = stack.pop();
if(m != '[') return false;
}
}
if(stack.empty())
return true;
return false;
}
}