题目
给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
- 左括号必须用相同类型的右括号闭合。
- 左括号必须以正确的顺序闭合。
- 来源:力扣(LeetCode)
- 链接:leetcode-cn.com/problems/va…
- 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解法
思路
- 先判断长度是不是奇数,如果是直接返回false
- 应用栈。
代码
public boolean isValid(String s) {
int n = s.length();
if (n % 2 != 0) {
return false;
}
Map<Character, Character> map = new HashMap<>();
map.put(')', '(');
map.put(']', '[');
map.put('}', '{');
Stack<Character> stack = new Stack<>();
for (int i = 0; i < n; i++) {
Character c = s.charAt(i);
if (map.containsKey(c)) {
if (stack.isEmpty() || stack.pop() != map.get(c)) {
return false;
}
} else {
stack.push(c);
}
}
return stack.isEmpty();
}
update20220518
public boolean isValid(String s) {
char[] chars = s.toCharArray();
int n = chars.length;
if (n % 2 != 0) {
return false;
}
Stack<Character> stack = new Stack<Character>();
for (int i = 0; i < n; i++) {
if (chars[i] == '(' || chars[i] == '[' || chars[i] == '{') {
stack.push(chars[i]);
} else {
if (stack.isEmpty()) {
return false;
}
char c = stack.pop();
if ((chars[i] == ')' && c == '(') ||
(chars[i] == ']' && c == '[') ||
(chars[i] == '}' && c == '{')) {
continue;
} else {
return false;
}
}
}
return stack.isEmpty();
}