给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
思路:
将字符串中的元素依次进行判定,若为左括号就进栈,若为右括号则与栈顶元素进行比较若为与之匹配的左括号:若匹配失败返回false;若条件成立,继续执行直到字符串遍历完,并且栈为空.
代码实现:
package Test;
import java.util.Stack;
public class Solution {
public boolean isValid(String s) {
//实例化一个栈
Stack<Character> stack = new Stack<Character>();
//遍历字符串
for (int i = 0; i < s.length(); i++) {
char ret = s.charAt(i);
//若字符串第一个字符为右括号
if (stack.isEmpty()){
if(ret == '}' || ret == ']' || ret == ')'){
return false;
}
}
//处理一般情况
if (ret == '{' || ret == '[' || ret == '('){
stack.push(ret); //将该字符压入栈
}else{
if (ret == '}' && stack.peek() == '{') {
stack.pop(); //栈顶元素出栈
}else if (ret == ']' && stack.peek() == '['){
stack.pop();
}else if (ret == ')' && stack.peek() == '('){
stack.pop();
}else{
return false; //匹配失败
}
}
}