给定一个只包括 '('
,')'
,'{'
,'}'
,'['
,']'
的字符串,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
注意空字符串可被认为是有效字符串。
示例 1: 示例 2: 示例 3: 示例 4: 示例 5:
输入: "()" 输入: "()[]{}" 输入: "(]" 输入: "([)]" 输入: "{[]}" 输出: true 输出: true 输出: false 输出: false 输出: true
解题思路:声明一个栈,遍历字符串的每一个字符,比如,第一个是左括号,入栈,如果第二个还是左括号则继续入栈,如果第二个是右括号,则与栈顶的这个左括号进行匹配判断,如果匹配成功则左括号出栈,如果匹配不成功,则表示该字符串无效,往后以此类推的入栈,及匹配判断,只要有一个匹配就为无效。
栈顶元素反映了在嵌套的层次关系中,最近的需要匹配的元素。
import java.util.Stack;
class Solution {
public boolean isValid(String s) {
Stack<Character> stack = new Stack<>();
for(int i = 0 ; i < s.length() ; i ++){
char c = s.charAt(i);
if(c == '(' || c == '[' || c == '{') {
stack.push(c);
}else{
if(stack.isEmpty()) {
return false;
}
char topChar = stack.pop();
if(c == ')' && topChar != '(') {
return false;
}
if(c == ']' && topChar != '[') {
return false;
}
if(c == '}' && topChar != '{') {
return false;
}
}
}
return stack.isEmpty();
}
public static void main(String[] args) {
System.out.println((new Solution()).isValid("()[]{}"));
System.out.println((new Solution()).isValid("([)]"));
}
}
结果:true false