[leetcode] 22:有效的括号
问题描述
给定一个只包含括号的字符串,判断字符串是否有效。
有效字符串需满足:
1)左括号必须用相同类型的右括号闭合。
2)左括号必须以正确的顺序闭合。
注: 空字符串也可被认为是有效字符串
示例
1) 输入: "()"
输出: true
2) 输入: "()[]{}"
输出: true
3) 输入: "([)]"
输出: false
解题思路
依次遍历字符串元素,并将元素压入堆栈中,当遍历元素与栈顶元素相匹配,构成一个有效括号时,栈顶元素出栈。遍历完所有字符串时若栈为空,则每个括号均能得到匹配,字符串有效;否则字符串无效。
1)新建一个空的堆栈;
2)依次遍历字符串元素,令c表示当前元素的位置;
3)将首位元素压入栈中,c指向下一元素;
4)判断c对应元素是否与栈顶元素构成括号对"()“或括号对”[]“或括号对”{}",若是,栈顶元素出栈,更新栈顶元素,c指向下一元素位,重复执行步骤4);
5)执行完循环操作后,判断是否堆栈为空,若为空表明所有括号均配对,字符串有效;若不为空表明存在无法配对的括号,字符串无效。
java程序如下
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
char[] c=s.toCharArray();
for (char c1:c){
if(stack.empty()){
stack.push(c1);
}
else if((c1==')' && stack.peek()=='(')||(c1==']' && stack.peek()=='[') || (c1=='}' && stack.peek()=='{')){
stack.pop();
}
else{
stack.push(c1);
};
}
return stack.empty();
}
}
总结
通过刷leetcode完成对栈的学习,及java编程语言中栈的使用方式