问题
给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例:
输入:s = “()”
输出:true
输入:s = “([)]”
输出:false
思路
此问题在数据结构栈中运用的较多。
遍历给定的s字符串,当遇到一个左括号时,可以将此括号放入栈顶;遇到右括号时,可以取出栈顶的左括号,判断两者是否匹配。如果不匹配则说明该s字符串为false。在遍历结束后,如果栈中没有左括号,说明我们将s字符串中的所有左括号都有匹配的右括号,返回 True,否则返回 False。
代码
class Solution {
public boolean isValid(String s) {
int n = s.length();
Stack<Character> stack = new Stack<>();
if (n % 2 != 0) {
return false;
}
char[] c = s.toCharArray();
for (int i=0;i<n;i++) {
if (c[i] == '(') {
stack.push(')');
} else if (c[i] == '[') {
stack.push(']');
} else if (c[i] == '{'){
stack.push('}');
} else if (stack.isEmpty() || c[i] != stack.pop()) {
return false;
}
}
//当全部匹配结束后,栈中仍有元素则返回false
if (!stack.isEmpty()) {
return false;
}
return true;
}
}
在实现的过程中,可以采用哈希表记录。哈希表中存储每一种括号。哈希表的键为右括号,值为相同类型的左括号。